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

Petit nouveau ! | 8 Messages

12 mars 2006, 18:52

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!

Eléphant du PHP | 413 Messages

13 mars 2006, 12:04

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 ?
--
Goeb

Petit nouveau ! | 8 Messages

13 mars 2006, 17:24

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!!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 mars 2006, 00:54

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."*"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute