8792 sujets

Développement web côté serveur, CMS

bonjour

je fait un petit chat ou le message est ajouté après une réception post, à la suite dans un fichier 'txt'. Puis j'ouvre le fichier 'txt' ,en récupère le contenu pour l'afficher.
Mais le pb est que le contenu récupéré n'affiche pas le dernier message, mais le précedant ! donc il faut actualiser si l'on ve tt les messages.

j'ai pourtant bien fait les choses dans l'ordre, d'abort le fwrite pour le nouveau message, puis le récupère tt avec un fread.
On dirait que sa marche à l'envers. Smiley confus
Une idée les collègues ?
Administrateur
Bonjour,

est-ce que tu pourrais être plus précis sur la manière dont tu t'y prends? Un copier-coller des lignes fopen, fread, fwrite et fclose par exemple Smiley cligne
'r/ r+ / w / w+ / etc' change beaucoup de choses
QuentinC a écrit :
Peut-être que tu as besoin de déplacer le pointeur du fichier (fseek sauf erreur).

je pensse pas que se soit sa le pb car les fichiers sont bien trouvés.

Pour Felipe :

// ajout du message
$fichier='chat.txt';
$file=fopen($fichier,'a');
fwrite($file,$chaine); // la chaine c le nouveau msg
fclose($file);

// récupération du contenu
$fichier='chat.txt';
$file=fopen($fichier,'r');
$contenu=fread($file,filesize($fichier));
fclose($file);

// affichage
print $contenu;
// c à ce moment là que le dernier msg n'est pas affiché comme si il récupérai le fichier avant d'avoir ajouté le dernier msg; puis il ajoute le message puisque quant j'acutalise le dernier msg est là.

mistère Smiley eek
si tu veut je peut t'envoyer le code simplifié.
Modifié par dawadam (25 Aug 2006 - 18:07)
Peut-être une piste :

a écrit :
La lecture s'arrête lorsque length octets ont été lus, ou que l'on a atteint la fin du fichier, ou lorsqu'un paquet devient disponible ou (après avoir ouvert les flux utilisateurs) lorsque 8192 octets ont été lus, le premier des trois survenant.


Essaye peut-être en lisant 1024 octets à chaque fois, avec une boucle. Quelque chose de ce genre (ni testé, ni validé, ni rien !) :


$text = "";
while(!feof($filename))
{
$buffer=fread($filename,1024);
$text .= $buffer;
}
fclose($filename);
echo $text;


Sinon je ne vois pas trop, ton code a l'air bon mais peut-être faut-il un peu de temps entre le moment où tu fermes ton "ressource_handler" et le moment où tu le ré-ouvres...

Je viens de voir qu'il existe aussi la fonction file_get_contents qui peut peut-être t'aider Smiley cligne
Modifié par daitheflu (25 Aug 2006 - 15:17)
Je vien d'éssayer l'idée de daitheflu et se coup-ci, je n'est droit q'au dernier message, mais je pensse avoir trouvé:
Vu que j'ouvre le fichier avec l'atribu 'a' , le pointeur se trouve à la fin du fichier et g l'inpression que quand je réouvre avec l'atribu 'r', sa ne déplace pas le pointeur.
cela voudrai dire que QuentinC avais vu juste;
Smiley lol TadadADA (son de zelda quant il trouve un objet).
Je test et je revient ...
Logiquement quand tu fais un :

$r = fopen($fichier,"r");


Il ouvre le fichier en lecture seule et place le pointeur au début du fichier (d'après la doc). Ca me semble donc bizarre... Mais si c'est le cas, c'est toujours bon à savoir ^^
Il n'y a qu'en cas d'ouverture en mode ajout que le pointeur n'est pas placé au début.
Pour tous les autres modes en tout cas r, w, et rw, le pointeur se place au début.
Pour r+ et w+, je ne connais pas ces modes donc je préfère ne rien dire.
Dans ce cas, ce n'est meme pas la peine d'éssayer, je voulais replacer le pointeur au début avec 'seek' (d'ailleur g du mal avec les classes).

c vrai que le pointeur doit se mettre au début mais l'exemple parle de lui meme, apparement ...
je v m'arracher les cheveux. Smiley bawling

quelqu'un s'aurai m'expliquer comment on replace un pointeur au début d'un fichier que je test quand meme.
Bonjour dawadam Smiley smile

Deux petites choses :

- L'affichage de ligne de code doit se faire entre les balises prévues à cet effet "Code"
- Essai d'écrire dans un français le plus correct possible, non seulement ça aide pour les recherches sur le forum, mais ça permet aussi au forum de rester le plus accessible possible Smiley cligne

Merci d'avance de bien vouloir corriger tes posts, s'il te plait Smiley smile
Modifié par dominique (25 Aug 2006 - 18:05)
sa y est sa marche:

pour l'écriture, rien ne change mais pour la lecture, j'ai utilisé le code de daitheflu auquel j'ai ajouté le retour du pointeur au début du fichier.


$fichier='chat.txt';
$file=fopen($fichier,'r');
$text = "";
fseek($file, 0);
while($buffer=fread($file,1024))
{
$text .= $buffer;
}

print "<br>t<br>".$text."<br>t<br>";


c'est tout de même curieux, j'ai du mal à trouver une explication. Smiley sweatdrop
Pour revenir en début de fichier il existe aussi la fonction rewind.

Pour essayer d'élucider le mystère, as-tu essayé en changeant le nom de variable ?
Ca donnerait quelque chose comme :

$ecriture = fopen($filename,"a");
fwrite($texte,$ecriture);
fclose($ecriture);

$lecture = fopen($filename,"r");

// Première solution :
$contenu = file_get_contents($lecture);

// Deuxième solution :
$contenu = "";
while(!feof($lecture))
{
$buffer = fread($lecture,1024);
$contenu.=$buffer;
}

fclose($lecture);

echo $contenu;


Je doute fortement que ça vienne de là mais on ne sait jamais. Et puis il serait intéressant d'arriver à savoir ce qui cloche Smiley smile