# Fichier txt incrementation en php

**URL:** <https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 12:25 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066 "2016-02-21T00:25:26Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 12:25 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/1 "2016-02-21T00:25:26Z")

</div>

Bonjour, j’utilise depuis longtemps un fichier txt (compteur).  
celui ci contient 27599 je veux le changer par 28500, pour ca pas de proble je l’ouvre avec nano je modifi et il contient bien 28500, puis ensuite il ne s’incremente plus, je récupére donc une copie avec 27599 qui s’incrémente toujours comme il faut (+1) a chaque fois.  
je fais un chmo 777 mais rien n’y change, c’est fou ca meme sur mon serveur distant j’ai le meme problem.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 12:25 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/2 "2016-02-21T00:25:27Z")

</div>

Je n’ai pas bien compris ce que tu dis. Admettons que ça soit ceci:

- Tu as un script PHP qui incrémente un compteur dans un fichier texte
- Tu veux incrémenter ce fichier à la main, ça marche mais c’est le backup qui est incrémenté par le programme.

La raison est que ton script PHP ne ferme pas ton fichier à chaque incrémentation et le laisse ouvert, il manipule toujours le même inode. Lorsque tu édites un fichier, le backup est le fichier d’origine donc l’inode d’origine et le un nouvel inode est crée pour le fichier nouvellement édité. Un lsof devrait te permettre de vérifier cela en montrant un fichier constamment ouvert.  
Il te faut simplement fermer correctement ton fichier dans le script PHP.

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 12:25 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/3 "2016-02-21T00:25:31Z")

</div>

C’est quoi: une inode  
C’est quoi: Un lsof

je parle php et compteur.txt  
il ne s’incrémente plus avec le script aprés l’avoir modifié a la mano avec nano , gedit ou meme vi.

---

<div class="post-metadata">

**Author:** ![Glorf](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/d6d6ee/32.png) [@Glorf](https://www.debian-fr.org/u/Glorf)\
**Post date:** [Février 21, 2016, 12:25 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/4 "2016-02-21T00:25:31Z")

</div>

Boule de cristal, boule de cristal …  
Peux-tu nous montrer le code, un ls -l compteur.txt, et aussi les éventuelles erreurs ?  
Tu as essayé ton code en mettant un error\_reporting(E\_ALL); au début ?

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 12:25 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/5 "2016-02-21T00:25:31Z")

</div>

```auto
justclo@bureau:
ls -l ./compteur.txt
-rwxrwxrwx 1 justclo justclo 5 3 janv. 12:13 ./compteur.txt
```

[code]  
///generation du numero commande///////

$fp = fopen("./compteur.txt",“r+”);

$num\_com = fgets($fp,11);

$num\_com++;

fseek($fp,0);

fputs($fp,$num\_com);

fclose($fp);

$num\_com=$num\_com+1;

$\_SESSION[‘num\_com’]=$num\_com;

/////////////[/code]

Tu as essayé ton code en mettant un error\_reporting(E\_ALL); au début ?  
-Non, je ne me rapelle plus comment on met ca dans l’entete de la pâge, je vais regarder de suite, parce-ce que sinon pas de message d’erreur.

je vient de modifier le fichier a la mano le resultat :

```auto
ls -l ./compteur.txt
-rwxrwxrwx 1 justclo justclo 6 3 janv. 20:13 ./compteur.txt
```

Je vient d’ éditer et modifier le fichier avec abiword et la il s’'incremente, meme apres la modification.

---

<div class="post-metadata">

**Author:** ![david96](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/ccd318/32.png) [@david96](https://www.debian-fr.org/u/david96)\
**Post date:** [Février 21, 2016, 2:32 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/6 "2016-02-21T02:32:59Z")

</div>

J’ai le même problème étonnant.

Je suis en train de faire un script compteur (avec fichier sans base de données), mais avec cookie, histoire de ne pas incrémenter le même utilisateur.  
Bref, pendant mes tests, j’ai modifié un fichier avec vim et du coup il ne s’incrémente plus (de même avec un autre éditeur, ou traitement de texte).

j’ai vérifié avec lsof, le fichier n’y est pas, et il est bien fermé.

Étrange.

Édit :  
Qqs pistes \>  
Sur l’irc debianfr, le membre Surcouf a appuyé mon intuition sur le saut de ligne que rajoute automatiquement l’éditeur vim et autres je suppose.  
Confirmation avec la commande `od -cx fichier.txt`

Le rajout proposé par les liens suivants sur le fichier de config .vimrc ou directement dans l’éditeur via la commande `:set fileformats=dos` etc… n’ont rien donné. Mais y’a de bonnes pistes.  
[fr.w3support.net/index.php?db=so&id=1050640](http://fr.w3support.net/index.php?db=so&id=1050640)  
[vim.dindinx.net/vim7/traduit/htm … t.php#23.1](http://vim.dindinx.net/vim7/traduit/html/usr_23.txt.php#23.1) (très bon ce lien 🙂)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:32 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/7 "2016-02-21T02:32:59Z")

</div>

Je ne connais pas PHP et je n’ai pas le temps d’aller voir les nom de fonctions exacte, mais l’algorithme devrait être, je pense :

```auto
ouvrir_le_fichier_en_lecture/écriture
lire_un_entier
se_positionner_au_début_du_fichier
tronquer_le_fichier
écrire_lentier
fermer_le_fichier
```

avec éventuellement un flush avant la modification. Si c’est déjà ce que tu fais montre-nous le code.

Au passage j’ai aucune idée de comment ça se passe avec plusieurs client simultanément [size=50](c’est vraiment bien les bases de données)[/size].

---

<div class="post-metadata">

**Author:** ![david96](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/ccd318/32.png) [@david96](https://www.debian-fr.org/u/david96)\
**Post date:** [Février 21, 2016, 2:33 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/8 "2016-02-21T02:33:16Z")

</div>

C’est une vielle fonction que j’avais fais en 2005 (PHP4), mais je pense que j’avais bien respecté le protocole comme tu le soulignes :

`function Compteur($fichierCompteur,$chemin)
{
	if(file_exists($chemin.$fichierCompteur))
	{
		$ouvre=fopen($chemin.$fichierCompteur,"r+");
		$compteur = fgets($ouvre,7);
		$compteur++;
		rewind($ouvre);
		fwrite($ouvre,$compteur,7);
		fclose($ouvre);
	}
	else
	{
		$ouvre=fopen($chemin.$fichierCompteur,"w");
		$compteur=1;
		fwrite($ouvre,$compteur,7);
		fclose($ouvre);
	}
	return $compteur;
}`

[size=85]Édit : oui c’est vraiment bien les bases de données, mais à l’époque j’étais en mutualisé (à la base je le faisais via une base de données avec données statistiques à la clé) et même en dédié, j’ai pris pour habitude d’alléger le plus possible cette dernière… Pour mon site en question (site d’annonces) j’ai déjà environs 100 tables et le tout mis en cache à chaque page qui en fait appel (fichiers \> ob\_start()…), avec 5 000 visites uniques par jours je me dois d’optimiser cette dernière 😉[/size]

édit 2 : j’ai bien tenté d’ouvrir le fichier avec la fonction [trim()](http://fr2.php.net/manual/fr/function.trim.php) censée éliminer les espaces, tab,\n,\0 ect… de début et de fin de ligne, mais nada.

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/9 "2016-02-21T02:34:34Z")

</div>

Euh ça n’a peut-être rien à voir mais pourquoi s’emmerder à passer avec un fopen quand on peux utiliser un file\_get\_contents file\_put\_contents ?

Vous êtes contraint d’utiliser du PHP4 ?

---

<div class="post-metadata">

**Author:** ![david96](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/ccd318/32.png) [@david96](https://www.debian-fr.org/u/david96)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/fichier-txt-incrementation-en-php/30066/10 "2016-02-21T02:34:35Z")

</div>

Merci de ta remarque constructive, rassures toi, c’est ce que j’utilise depuis fin 2006, mais à l’époque ou j’ai fait l’autre script, PHP 5 ce faisait rare 🙂

Mes potes eux me demandent pourquoi je suis contraint avec PHP tout court alors qu’il y’a Ruby on Rails…

Mais mince à la fin, laissez moi être has-been 😆

Sinon, pour en revenir au sujet, toujours pas trouvé, mais ça va se faire, je le sens 😛
