J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r
ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g
ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Vincent
--
Vincent MOTTE
www.france-dev.com
Logiciel de gestion d'hebergement, facturation, panel, admin, relances..
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Guillaume Bouchard
MOTTE wrote:
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Ajout les lignes à l'envers, ou ouvre le fichier et positionne toi a la fin - un nombre de caracteres donnée.
-- Guillaume.
MOTTE wrote:
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r
ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g
ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Ajout les lignes à l'envers, ou ouvre le fichier et positionne toi a la
fin - un nombre de caracteres donnée.
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Ajout les lignes à l'envers, ou ouvre le fichier et positionne toi a la fin - un nombre de caracteres donnée.
-- Guillaume.
P'tit Marcel
MOTTE écrivit:
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
si ton serveur tourne sous Unix, tail est ton amie. exec("tail $lefichier",$retour);
avec :
tail [OPTION]... [FILE].. standard input.
Print the last 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read
-n, --lines=N output the last N lines, instead of the last 10
eça -- P'tit Marcel
MOTTE écrivit:
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r
ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g
ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
si ton serveur tourne sous Unix, tail est ton amie.
exec("tail $lefichier",$retour);
avec :
tail [OPTION]... [FILE].. standard input.
Print the last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving
the file name. With no FILE, or when FILE is -, read
-n, --lines=N
output the last N lines, instead of the last 10
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
si ton serveur tourne sous Unix, tail est ton amie. exec("tail $lefichier",$retour);
avec :
tail [OPTION]... [FILE].. standard input.
Print the last 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read
-n, --lines=N output the last N lines, instead of the last 10
eça -- P'tit Marcel
DELPORTE dominique
MOTTE wrote:
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Plusieurs solutions existent : - 1 : tes lignes sont de tailles fixes, alors tu utilises fseek pour te deplacer de nbre_carac_par_ligne*nber_de_ligne en utilisant l'option SEEK_END - 2 : tu recuperes la taille de ton fichier, tu utilises fseek pour avancer suffisement loin dans le fichier, puis tu utilises fgets - 3 : tu utilises exec + tail pour recuperer les n dernieres lignes
-- Dominique Delporte
MOTTE wrote:
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r
ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g
ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Plusieurs solutions existent :
- 1 : tes lignes sont de tailles fixes, alors tu utilises fseek pour te
deplacer de nbre_carac_par_ligne*nber_de_ligne en utilisant l'option
SEEK_END
- 2 : tu recuperes la taille de ton fichier, tu utilises fseek pour
avancer suffisement loin dans le fichier, puis tu utilises fgets
- 3 : tu utilises exec + tail pour recuperer les n dernieres lignes
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Plusieurs solutions existent : - 1 : tes lignes sont de tailles fixes, alors tu utilises fseek pour te deplacer de nbre_carac_par_ligne*nber_de_ligne en utilisant l'option SEEK_END - 2 : tu recuperes la taille de ton fichier, tu utilises fseek pour avancer suffisement loin dans le fichier, puis tu utilises fgets - 3 : tu utilises exec + tail pour recuperer les n dernieres lignes
-- Dominique Delporte
Serge
Hello,
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Vincent
Tu génères un tableau de la taille du nombre de lignes que tu veux récupérer, et avec un indice qui s'incrémente (%le nombre de ligne), tu remplis ton tableau des lignes successives du fichier. A la fin il ne te reste que les n dernières lignes.
Tu peux aussi essayer avec des array_push et des array_shift, mais je ne connais pas les performances pour un gros fichier vis-à-vis d'array_shift, qui d'apprait la doc "déplace tous les éléments vers le bas après avoir supprimé le premier". Les avantages sont que si ton fichier fais moins de 10 lignes, tu ne te retrouves pas avec un tableau plein de cases vides, et que la plus ancienne des lignes se trouve toujours en début de tableau.
while (($line = fgets($fp, 2048)) { if (array_push($ar,$line)>$n) { array_shift ($ar); } } } ?>
Enfin, si tu te sens à l'aise avec les pointeurs, tu peux appliquer le même type d'algo avec une liste circulaire de pointeurs (ce qui otera le défaut d'array_shift).
- Serge -
Hello,
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r
ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g
ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Vincent
Tu génères un tableau de la taille du nombre de lignes que tu veux
récupérer, et avec un indice qui s'incrémente (%le nombre de ligne),
tu remplis ton tableau des lignes successives du fichier.
A la fin il ne te reste que les n dernières lignes.
Tu peux aussi essayer avec des array_push et des array_shift, mais je
ne connais pas les performances pour un gros fichier vis-à-vis
d'array_shift, qui d'apprait la doc "déplace tous les éléments vers le
bas après avoir supprimé le premier".
Les avantages sont que si ton fichier fais moins de 10 lignes, tu ne
te retrouves pas avec un tableau plein de cases vides, et que la
plus ancienne des lignes se trouve toujours en début de tableau.
while (($line = fgets($fp, 2048)) {
if (array_push($ar,$line)>$n) {
array_shift ($ar);
}
}
} ?>
Enfin, si tu te sens à l'aise avec les pointeurs, tu peux appliquer le
même type d'algo avec une liste circulaire de pointeurs (ce qui otera
le défaut d'array_shift).
J'ai un fichier log que je fois analyser avec un script PHP. Jusque là r ien de difficile. Seulement, je dois lire ce fichier depuis la fin. En g ros, je voudrais pouvoir recupérer les x dernières lignes. Une idée ?
Vincent
Tu génères un tableau de la taille du nombre de lignes que tu veux récupérer, et avec un indice qui s'incrémente (%le nombre de ligne), tu remplis ton tableau des lignes successives du fichier. A la fin il ne te reste que les n dernières lignes.
Tu peux aussi essayer avec des array_push et des array_shift, mais je ne connais pas les performances pour un gros fichier vis-à-vis d'array_shift, qui d'apprait la doc "déplace tous les éléments vers le bas après avoir supprimé le premier". Les avantages sont que si ton fichier fais moins de 10 lignes, tu ne te retrouves pas avec un tableau plein de cases vides, et que la plus ancienne des lignes se trouve toujours en début de tableau.
while (($line = fgets($fp, 2048)) { if (array_push($ar,$line)>$n) { array_shift ($ar); } } } ?>
Enfin, si tu te sens à l'aise avec les pointeurs, tu peux appliquer le même type d'algo avec une liste circulaire de pointeurs (ce qui otera le défaut d'array_shift).