Page 1 sur 1

Lecture et affich d'un fichier txt avec saut de ligne!!

Posté : 12 mars 2006, 18:52
par dinastar
Bonjour à tous,

Je suis en train de créer mon propre script de commentaire. J'y suis presque, mais voici où ça bloque:

J'ai 2 champs: pseudo et commentaire.

Je stoke les pseudos dans l'ordre et séparés par "*" dans pseudo.txt
Idem pour les commentaires dans post.txt.

Le script fonctionne bien, mais impossible d'afficher un commentaire issu de post.txt quand le message comporte des retours à la ligne!!
Il m'affichera seulement la première ligne!

Voici le passage de mon script:
// ECRITURE DU FICHIER POST.TXT
	{
	$fp=fopen("$post","a");
	fputs($fp,$comments.="*");
	fclose($fp);
	}

// LECTURE DU FICHIER POST.TXT
	{
	$fp=fopen("$post","r");
	$contenu1=fgets($fp, filesize("post.txt"));
	$donnee1=explode("*",$contenu1);  			// parsing des données avec "*")
	fclose($fp);
	}

// AFFICHAGE DES DONNEES
$combien=count($donnee1)-1; 					// nbre d'éléments séparés par "*"
//for ($i=0;$i<=$combien;$i++) 					//pour fil de discussion déscendant
for ($i=$combien;$i>=0;$i--) 					//pour fil de discussion ascendant
	{
echo $donnee[$i];
}
Vous pouvez essayer mon scrip ici: http://www.dinastar-elec.info/perso/form.html

Je vous remercie d'avance!

Posté : 13 mars 2006, 12:04
par goeb
Salut,

je pense qu'il y a une erreur là :
fputs($fp,$comments.="*");
tu changes la valeur de $comments (avec le =).
est-ce vraiment fais exprès ?

Posté : 13 mars 2006, 17:24
par dinastar
Salut goeb,

Alors là tu m'en pose une bien bonne!! C'est un exemple que j'ai pris sur un autre site, mais je te garanti que ça fonctionne!! Peut-être que c'est le "." qui fait la difference.

Sinon, pour mon problème, j'ai trouvé la solution ailleur.

Ce n'est pas fgets() qu'il faut utiliser pour lire la totalité d'un fichier mais fread() qui le fait justement, soit:

Code : Tout sélectionner

// Lit un fichier, et le place dans une chaîne $filename = "/usr/local/something.txt"; $handle = fopen ($filename, "r"); $contents = fread ($handle, filesize ($filename)); fclose ($handle);
Je pense que beaucoup (et je l'ai vu ailleur) de gens croient que fread=fgets

fgets() ne lit qu'une ligne jusqu'à 4096 octets.

merci, et à bientôt!!

Posté : 14 mars 2006, 00:54
par Truc
Alors là tu m'en pose une bien bonne!! C'est un exemple que j'ai pris sur un autre site, mais je te garanti que ça fonctionne!! Peut-être que c'est le "." qui fait la difference.
fputs($fp,$comments.="*"); 
Cette ligne ajoute le fameux séparateur (*) à la fin du commentaire qui est écrit dans le fichier.

Le point (.) est la concaténation et lorqu'il est utilisé avant un égal (=) cela signifi qu'on concatène à la valeur de gauche la valeur de droite, un raccourci de:
$comments = $comments."*"