[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
A voir également:

6 réponses

Azer_Ty Messages postés 104 Date d'inscription   Statut Membre Dernière intervention   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
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
Hello,
as-tu essayé l'option 'a' ?
http://pwet.fr/man/linux/fonctions_bibliotheques/fopen/
Bon courage
0
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
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Azer_Ty Messages postés 104 Date d'inscription   Statut Membre Dernière intervention   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
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
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