[PHP] Lire un fichier txt par la fin

Résolu/Fermé
afrodje Messages postés 759 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 22 janvier 2014 - 27 juin 2009 à 14:36
 anzoom - 22 oct. 2011 à 17:03
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 vendredi 31 octobre 2008 Statut Membre Dernière intervention 4 juillet 2011 60
28 juin 2009 à 00:47
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 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
27 juin 2009 à 15:59
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 mardi 13 mars 2007 Statut Membre Dernière intervention 22 janvier 2014 168
27 juin 2009 à 18:09
Cela ne fonctionne pas, quand j'utilise "a", aucun affichage.
0
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
27 juin 2009 à 20:48
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 vendredi 31 octobre 2008 Statut Membre Dernière intervention 4 juillet 2011 60
28 juin 2009 à 12:43
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
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 mardi 13 mars 2007 Statut Membre Dernière intervention 22 janvier 2014 168
30 juin 2009 à 09:44
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