OVH Community, votre nouvel espace communautaire.

Problème d'écriture de caractère NULL (php)


Hachram
05/05/2008, 15h46
Alors, personne n'a déjà rencontré un problème similaire, personne n'a une petite idée sur la question ?
Suis-je le seul à avoir implémenté un chat sur mon site en utilisant un fichier plutôt que la base de donnée pour stocker les messages ?

En tout cas, bien qu'ayant peu d'espoir, j'ai envoyé la question au support, je posterai leur réponse ici...

Hachram
28/04/2008, 11h13
Bonjour,

Je rencontre exactement le même pb que toi sur l'écriture dans un fichier, il s'agit d'un fichier stockant les messages d'un chat et régulièrement, un certain nombre des messages du chat sont effacés, remplacés dans le fichier par des caractères NUL ("\0").

Mon analyse est la suivante : sur OVH, 2 utilisateurs d'un même site ne passent pas forcémenent par le même serveur Apache, et ces 2 (ou +) serveurs Apache ne semblent pas être "actualisés" de la même façon par rapport aux système de fichiers (NFS).

J'ai donc également pensé résoudre le pb avec un sytème de sémaphore, j'ai d'abord essayé avec la fonction flock, puis en m'informant d'avantage sur cette fonction et ses incompatibilité avec NFS, j'ai utilisé un système de lock basé sur mkdir comme décrit dans ce post : http://fr.php.net/manual/fr/function.flock.php#41321

Cela n'a pas résolu le problème, car même si l'accès à mon fichier en écriture est désormais unique, le problème semble venir du fopen en mode append (a+), comme si pour les 2 serveurs apache le contenu du fichier était différent.
J'ai, tout comme toi, tout essayé, clearstatcache, tt les modes de fopen, fseek, ftruncate etc... mais je n'ai toujours pas trouvé de solutions.

Si qqun connait une solution ou si OVH pouvait nous expliquer plus clairement ce problème et comment le contourner, ça serait sympa de nous aider, merci d'avance.

fallout88
03/04/2008, 13h56
Bonjour,
J'ai un gros problème d'écriture dans un fichier. Je dois logger des requêtes que je reçois dans un fichier texte en php. Donc je ne fais qu'appel au célèbre trio fopen, fwrite et fclose et cela fonctionne relativement bien mon fichier ce remplit bien avec les bonnes données. Mais qu'une manière totalement aléatoire le fwrite ne me stocke pas ma chaîne de caractère mais une chaîne de caractère possédant la même taille. Et quand je dis de façon aléatoire c'est vrai aléatoire car l'erreur d'intervient pas à heure fixe et même pas dans une certaine tranche horaire, je teste avant le fwrite la chaîne de caractère et je ne passe donc jamais de chaîne de NULL.
Bon, j'ai mis plusieurs mécanismes pour essayer de régler cela, au début je pense que cela venait d'une erreur d'écriture simultanée, donc je me suis développer une fonction de mutex régler ce problème mais il a pourtant subsister. J'ai tenter toute sorte de chose comme changer les modes de fwrite en r+,w,a,a+, rajouter des fflush. J'ai même logger toutes les requêtes http pour vérifier si cela ne viendrai pas d'une mauvaise requête et enfin de compte cela ne vient toujours de pas de là. Mais bon, je retrouve aussi des erreurs d'écriture sur ce fichier.
Donc, tout ça pour demander si par hasard vous n'avez jamais rencontrer ce problème ou si vous aviez une idée sur l'origine de l'erreur.