[PHP] Lire un fichier txt par la fin

Résolu
afrodje Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   -  
 anzoom -
Bonjour,

J'arrive à le lire du début vers la fin mais pas l'inverse.
						<?php
						$fp = fopen("logs/log.txt","r"); 
						$page = "";
						while (!feof($fp))
						{
						  $page .= fgets($fp, 4096);
						  $page .= "<br>";
						}
						echo $page;
						?>	


Comment faire l'inverse?

Merci
--
Pensez à mettre en résolu en haut à droite dès que le solution est trouvé !
Configuration: Windows Vista
Firefox 3.0.4

6 réponses

  1. Azer_Ty Messages postés 108 Statut Membre 60
     
    Bonsoir,

    Si vous souhaitez seulement le lire pour l'afficher en sens inverse :
    <?php
    $fp = fopen("logs/log.txt","r"); 
    $page = "";
    while (!feof($fp))
    {
      $page = fgets($fp, 4096) . $page;
      $page .= "<br>";
    }
    echo $page;
    ?>


    Sinon pour le lire en sens inverse voici un script qui est valide et qui affiche les lignes dans le sens inverse :
    <?php
    $fp = fopen("monFichier.txt","r");			// ouverture en lecture, le pointeur est au début
    $taille_caract = sizeof('a');				// on stock la taille d'un caractère
    fseek($fp, -($taille_caract), SEEK_END);	// on place le pointeur avant le dernier caractère
    $page = "";
    $ligne = "";
    // ftell retourne la position courante du pointeur
    while(ftell($fp) > 0){				// tant que le pointeur n'est pas au début
    	$caract = fgetc($fp);			// on lit un caractère
    	if($caract != "\n"){			// si le caractère n'est pas une fin de ligne
    		$ligne = $caract.$ligne;	// on l'ajoute à la ligne
    	}else{							// si la ligne est finie
    		$page .= $ligne."<br />";	// on l'ajoute à la page
    		$ligne = "";				// et on vide la ligne
    	}
    	fseek($fp, -($taille_caract * 2), SEEK_CUR);// on remonte de 2 caractères : celui que l'on vient de lire et celui que l'on va lire
    }
    fclose($fp);
    echo $page;
    ?>


    Bonne soirée,
    5
  2. afrodje Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   168
     
    Cela ne fonctionne pas, quand j'utilise "a", aucun affichage.
    0
  3. moderno31 Messages postés 900 Statut Membre 92
     
    je ne n'y connais pas dans de domaine jamais encore exploré. J'espère que quelqu'un d'autre pourra t'aider.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Azer_Ty Messages postés 108 Statut Membre 60
     
    Bonjour,
    Après réflexion le script que j'ai indiqué est incomplet, il manque la lecture du tout premier caractère, voici le version complète :
    <?php
    $fp = fopen("monFichier.txt","r");			// ouverture en lecture, le pointeur est au début
    $taille_caract = sizeof('a');				// on stock la taille d'un caractère
    fseek($fp, -($taille_caract), SEEK_END);	// on place le pointeur avant le dernier caractère
    $page = ""; $ligne = "";
    
    // ftell retourne la position courante du pointeur
    while(ftell($fp) > 0){				// tant que le pointeur n'est pas au début
    	$caract = fgetc($fp);			// on lit un caractère
    	if($caract != "\n"){			// si le caractère n'est pas une fin de ligne
    		$ligne = $caract.$ligne;	// on l'ajoute à la ligne
    	}else{							// si la ligne est finie
    		$page .= $ligne."<br />";	// on l'ajoute à la page
    		$ligne = "";				// et on vide la ligne
    	}
    	fseek($fp, -($taille_caract * 2), SEEK_CUR);// on remonte de 2 caractères : celui que l'on vient de lire et celui que l'on va lire
    }
    
    // Lecture du tout premier caractère
    $caract = fgetc($fp);
    if($caract != "\n"){
    	$ligne = $caract.$ligne;
    }
    $page .= $ligne."<br />";
    
    fclose($fp);
    echo $page;
    ?>


    Bonne journée,
    0
    1. anzoom
       
      bonjour,
      mon soucis est de savoir comment rechercher une chaine de caractères de la dernière ligne d'un fichier vers sa ligne de début (à savoir du bas vers le haut du fichier) et afficher la toute première ligne qui contient la chaine.
      0
  6. afrodje Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   168
     
    Finalement ce code fonctionne :

    <?php
    $fp = fopen("logs/log.txt","r"); 
    $page = "";
    while (!feof($fp))
    {
      $page = fgets($fp, 4096) . $page;
      $page .= "<br>";
    }
    echo $page;
    ?>


    Merci
    0