[Résolu] Afficher les 10 dernières lignes d'un fichier

Afficher les 10 dernières lignes d'un fichier [Résolu] - PHP - Programmation

Marsh Posté le 16-04-2008 à 12:21:14    

Bonjour à tous,
 
Je cherche à afficher les 10 dernières lignes d'un fichier csv de log pour ensuite afficher sur un page.
 
J'ai fait des recherches et je pense devoir utiliser FSEEK mais je ne comprend pas comment m'en servir puisque le fichier n'a jamais la même taille.
 
Pourriez vous me donner une piste svp.
 
Merci d'avance,  
 
 
Codialement,


Message édité par akalaan le 16-04-2008 à 16:12:00
Reply

Marsh Posté le 16-04-2008 à 12:21:14   

Reply

Marsh Posté le 16-04-2008 à 12:25:22    

3e paramètre de fseek()


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-04-2008 à 12:36:06    

Merci de m'avoir répondu
 
SEEK_END je présume,
 

Code :
  1. function readLines($file){
  2. $open = fopen($file,'r');
  3. fseek($open,0,SEEK_END);
  4. $pos = ftell($open);
  5. $data = fgets($open,4096);
  6. echo $pos;
  7.         echo $data;
  8. }


 
Cela me renvoit 71 sachant que mon fichier test ressemble à cela mais ne m'affiche rien car je pense que le 71 doit être un \n.
 

Code :
  1. 1a
  2. 2b
  3. 3c
  4. 4d
  5. 5e
  6. 6f
  7. 7g
  8. 8h
  9. 9i
  10. 10j
  11. 11k
  12. 12l
  13. 13m
  14. 14n
  15. 15o
  16. 16p
  17. 17q
  18. 18r
  19. 19s
  20. 20t


 
Alors comment puis-je procéder pour afficher les 9 ligne au-dessus de sa position actuelle.
 
Cordialement,

Reply

Marsh Posté le 16-04-2008 à 12:40:28    

Voir commentaires de la doc PHP, il y a des gens qui parlent de ça (sur la doc en)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-04-2008 à 13:14:59    

Autre solution, probablement moins optimale (mais aussi moins prise de tête) :

Code :
  1. echo join(PHP_EOL, array_slice(file($chemin_vers_ton_fichier), -10));


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 16-04-2008 à 13:16:59    

fseek($open,0,SEEK_END);
placera le pointeur a la fin du fichier.
a mon avis c'est pas un /n mais un eof...  
 
utilise une valeur négative pour le 2eme argument si tu veu remonter le pointeur de x octets...
 
pour mieux comprendre:
 
$open = fopen($file,'r'); //ouvre le fichier
 
fseek($open,-50,SEEK_END); //place le pointeur 50 octets avant la fin du fichier  
 
$pos = ftell($open); //recupère la position du pointeur ([taille du fichier en octets] - 50)
 
$data = fgets($open,4096); //recupère le contenu de la ligne (jusqu'au prochain /n) a partir de l'emplacement du pointeur
 
$pos2 = ftell($open); //recupère la position du pointeur [dernière position connue + nombre d'octet de la ligne lue]
 
echo 'position du pointeur avant lecture: ',$pos,'<br />';
echo 'donnee lues: ',$data,'<br />';
echo 'position du pointeur apres lecture: ',$pos2,'<br />';

Reply

Marsh Posté le 16-04-2008 à 15:09:38    

effectivement, cela me renvoit bien une ligne, mais il se trouve que des lignes de log n'ont pas forcément les mêmes longueurs.
 
Je suis dsl, je ne comprend pas tout.
On déplace le curseur en fonction des octets, et non en fonction des lignes.
 
Quand je change la valeur de la position , 50 donne 8h mais si je met 49 j'obtient h.

Reply

Marsh Posté le 16-04-2008 à 16:11:25    

Effectivement sielfried, ta solution est la plus rapide et la plus simple.
 

sielfried a écrit :

Autre solution, probablement moins optimale (mais aussi moins prise de tête) :

Code :
  1. echo join(PHP_EOL, array_slice(file($chemin_vers_ton_fichier), -10));



 
Merci à tous,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed