Trouver un motif dans un fichier de log avec PHP
Rien de plus exhaustif qu’un fichier de logs ! Pourtant, nous les consultons rarement pour la simple et bonne raison qu’ils sont particulièrement indigestes (nous devrions apprendre à lire la matrice…).
Bien entendu, il existe un tas d’outils pour analyser et construire une synthèse à partir des données de log. Mais il arrive souvent qu’on ait besoin d’un détail que la synthèse n’apporte pas.
Dans ce cas, lecture obligatoire du fichier de log de 157843 lignes… avec un petit script en PHP pour extraire les informations qui nous intéressent. Ouf !
<?php /* Le fichier de log à analyser */ $fichier = "fichier.log"; /* Le motif à chercher */ $s = "google.fr"; /* Analyse et résultat */ $motif = "/$s/"; $pointeur = fopen($fichier, "r"); $i = 0; if ($pointeur) { while (!feof($pointeur)) { $ligne = fgets($pointeur); if (preg_match($motif, $ligne, $r)) { echo $ligne . ''; $i++; } } fclose($pointeur); echo "Motif '$s' trouvé $i fois."; } ?>
Commentaires
Seb
Plus simple en shell :
12 août 2007, 11h46 ·Christophe
Celle-là, je la garde précieusement ! Seulement, elle ne donne que le nombre d’occurences, pas leur contenu. Pour faire encore plus simple et obtenir les lignes du fichier qui comportent le motif, un
grep
suffit :PHP aura du mal à faire plus court…
12 août 2007, 23h58 ·Daline
Merci pour ce tutoriel bien expliqué. juste une petite question : est ce que « google.fr » est le bon motif à chercher ? je pose cette question car j’ai lu quelque part qu’on peut crawler sou le nom de google …. Merci d’avance pour votre réponse.
14 janvier 2013, 20h31 ·Woolyss
@Daline, le motif « google.fr » est un exemple ici. Oui, il est très simple de crawler et spoofer sous le nom de Google. L’extension User Agent Switcher ou le header dans cURL font ça très bien. Mais, cela n’est pas le propos ici.
Le grep est ce qu’il y a de plus simple pour parser le log.
8 février 2014, 20h07 ·