Problème aléatoire lors de l'écriture dans un fichier txt

cs_geryko Messages postés 328 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 25 mars 2019 - 3 sept. 2012 à 16:17
cs_geryko Messages postés 328 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 25 mars 2019 - 11 sept. 2012 à 11:59
Sur mon site, je mets à disposition des internautes des fichiers à télécharger.
Pour suivre les téléchargements, j'ai créé un ficher txt où je comtabllise les téléchargements.
Le format de chacune des lignes du fichier txt est de la forme :
nom_de_fichier 0000012
(ex. : 7 chiffres pour N = 12. Le 12 suivi de 2 espaces avant le 0Dh 0Ah du RC)

Tout fonctionne bien en local avec XP / EasyPHP PHP Version 4.3.10 .
Tout fonctionne bien sur mon site dans 90% des cas avec PHP Version 4.4.9 ,
mais de temps en temps je me retrouve avec 2 espaces entre le nom du fichier et le
nombre 0000012, ce qui a pour effet réduire mon nombre à 2 au lieu de12.
En 2 mois, j'ai réalisé de nombreux essais en modifiant mon programme sans sucès.
Que se passe-t'il ? Si qq avait une idée du problème ?

'========
Mon programme est le suivant ( extrait)
-
$fp = fopen("./compter_download_pub.txt","r+b"); // ouvrir le fichier txt
...
$La_ligne = ftell($fp); // début de la ligne concernée
$longueur_nom_fichier = strlen($le_fichier);
fseek($fp, $La_ligne + $longueur_nom_fichier + 1); // repositionne le pointeur sur le premier zéro
$nb_download = fgets($fp,8); // récupèrer le nombre
$nb_download ++ ; // incrémenter le nombre
$string = sprintf("%07d",$nb_download); // nb formaté 7 chiffres mis en txt
fseek($fp, $La_ligne + $longueur_nom_fichier + 1); // repositionne le pointeur sur le premier zéro
fwrite_stream($fp, $string); // écriture du nouveau nombre
ou alors
$string $le_fichier." 0000001 \n"; // s'il s'agit d'une adjonction à la liste, donc à la fin.

Je sais qu'il y aurait d'autres solutions mais dans un but purement didactique j'aimerais en savoir plus.
Que se passe-t'il ? Si quelqu'un avait une idée du problème ?
(solution non testée : tester le 1er 0 avant de l'écrire dans le fichier )
Mon site : https://www.microfer.fr/geryko/telechargements_publics.php?
-
Merci d'avance
Géryko

6 réponses

deutch36 Messages postés 73 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 11 décembre 2012 3
4 sept. 2012 à 08:49
Bonjour,

S'il s'agit d'une question de caractère invisible avez vous essayez la fonction trim()?
0
cs_geryko Messages postés 328 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 25 mars 2019
4 sept. 2012 à 10:18
Bonjour, et merci

Pour l'instant je n'ai pas encore essayé trim(),
mais je peux vous dire que lors de la dernière anomalie, il s'agissait d'un ajout avec la ligne suivant :

$string = $le_fichier." 0000001 \n";

Il ne devait donc y avoir qu'un seul espace entre guillemet et le 0 ?
Dans ce cas, le trim () ne peux rien faire.

Bien à vous
Géryko
0
deutch36 Messages postés 73 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 11 décembre 2012 3
4 sept. 2012 à 10:41
Le $string ne contient qu'un seul espace mais rien n'indique du peu que je lis que le $le_fichier ne contient pas de caractère invisible lui.

Donc si vous n'avez pas tenter tester :

<?php
$trim_fichier = trim($le_fichier);
$string = $trim_fichier . " 0000001 \n";
?>
0
cs_geryko Messages postés 328 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 25 mars 2019
8 sept. 2012 à 09:23
Bonjour,

Effectivement, en analysant bien les 2 types d'erreurs distincts
- mise à jour d'un nombre
- adjonction d'une nouvelle ligne
je me suis rendu compte que le problème pourrait bien venir d'un espace supplémentaire en fin de la variable $le_fichier.
J'ai mis en place la fonction trim() et depuis 3 à 4 jours, le
problème semble résolu. (c'est le principal)
-
Mais pourquoi ce phénomène aléatoire ? Mystère.
-
Pour info : Le nom du fichier est transmis par
$le_fichier = $_GET["mon_fichier"] ; // nom du fichier
le code suivant retrouve la ligne correspondante dans le fichier txt
if(ereg($le_fichier,$ligne_lue)){
-
J'attends encore quelques jours avant ce clore le sujet.

Merci à deutch36 pour son aide
Géryko
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
deutch36 Messages postés 73 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 11 décembre 2012 3
10 sept. 2012 à 12:01
Bonjour,

D'ou provient ce phénomène aléatoire?

La réponse me semble clair pourtant : de l'origine de la variable $le_fichier. (soit juste avant le $_GET et donc directement dans le nom d'origine du fichier)

Enfin le principal est d'avoir résolus le problème non? ;)
0
cs_geryko Messages postés 328 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 25 mars 2019
11 sept. 2012 à 11:59
Bonjour deutch36,

Oui c'est sûr, il y avait un espace à la fin de $le_fichier mais
pourquoi aléatoirement sur le site ?
(une fois de temps en temps)
impossible à reproduire en local ?
C'est cela le plus surprenant.
-
Nous en resterons là car je ne veux pas abuser de votre temps. Tout est OK maintenant.
Merci encore
-
Géryko
0
Rejoignez-nous