récuperer et classer les lignes d'un fichier

HD
Mammouth du PHP | 1181 Messages

13 févr. 2006, 16:46

salut
en codant un script qui récupère et classe quelques lignes d'un fichier, j'ai écrit ceci :
<?php
// objectif : récupérer les N dernières news de la plus récente à la plus ancienne
$n = 2 ;
$ligne = 0 ;
$Fichier = "" ;

if (!$fp = fopen("touteslesnews.htm","r")) {
echo "Pas de news pour le moment !";
exit;
}
else {
	while($n > $ligne) {
		$Ligne = fgets($fp,255); 
		echo $Ligne;		
		$Fichier .= $Ligne;	
		$ligne = $ligne + 1 ;
	}
	fclose($fp);
}



//reste à classer par date
// et à afficher
?>
le problème c'est que ce script récupère les N premières lignes du fichier alors que je vise les N dernières lignes :?: :!:
merci pour votre aide
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 684 Messages

13 févr. 2006, 17:56

Salut,

Tu devrais pouvoir faire ce que tu veux avec fseek.
Pour des details c'est ici : http://fr2.php.net/manual/fr/function.fseek.php.

Explication rapide par rapport a ce que tu veux faire :
Tu deplace ton pointeur de fichier a la fin et tu le deplace de en remontant.
L'inconvenient, c'est de bien gerer le retour en arriere. Je te conseils la doc qui te parle aussi de ftell().

A priori tu n'as que peux de modifs a faire sur ton script pour obtenir la lecture par la fin. En meme temps dans la doc, ils disent que fseek ne peut pas position son pointeur a la fin sur des pointeurs retournes par fopen() au format HTTP ou FTP.
Zigz4g

HD
Mammouth du PHP | 1181 Messages

13 févr. 2006, 19:03

merci pour ta réponse
fseek() ne peut pas être utilisé sur les pointeurs retournés par fopen() s'ils sont au format HTTP ou FTP
je n'ai pas très bien compri mais en tous cas je crois ce que le code dont j'ai besoin ressemble à :
<?php
function readlastline($file)
{
       $linecontent = " ";
       $contents = file($file);
       $linenumber = sizeof($contents)-1;
       $linecontet = $contents[$linenumber];
       unset($contents,$linenumber);
       return $linecontent;
}
?> 
:?:
(trouvé dans ton lien)
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]