Compteur php/fichier .txt
16 messages
• Page 1 sur 2 • 1, 2
- djon77
- Nouveau WRInaute

- Messages: 33
- Inscription: 26 Jan 2008
Compteur php/fichier .txt
Bonjour, j'aimerais améliorer un compteur php qui fonctionne avec un .txt
Je précise que je n'y connais pratiquement rien en php...Je travaille à partir de quelquechose qu'on m'a fait
Comment faire pour demander de changer la variable si elle atteint un certain nombre?
Puis effectuer une autre opération en fonction ce cette variable...
exemple: le fichier .txt affiche 10 et je veux que "lorsque c'est 10 ca repasse à 0".
j'ai le début:
$file=@fopen ( ".txt" "r+" )
fscanf etc...
if ( $chiffre == 10 )
--->mais pas la suite! (comment demander de mettre a 0)
ensuite lorsque la variable est changée ou pas selon sa valeur initiale je lui applique autre chose:
$nb++
rewind etc....
fclose // j'incrémente de 1 et je ferme
if ( $chiffre == 10 )
header ("location:ça")
else header ("location:ou ça") //en fonction du résultat j'envoie vers 2 endroits différents.
exit;
-->Est- ce que je dois "ouvrir et fermer" le fichier .txt avant chaque "if" ? ou l'ouvrir avant le 1er "if" et le fermer à la fin?
Merci d'avance et désolé c'est pas très clair
N'hésitez pas à me dire si j'ai écrit n'importe quoi!!
Je précise que je n'y connais pratiquement rien en php...Je travaille à partir de quelquechose qu'on m'a fait
Comment faire pour demander de changer la variable si elle atteint un certain nombre?
Puis effectuer une autre opération en fonction ce cette variable...
exemple: le fichier .txt affiche 10 et je veux que "lorsque c'est 10 ca repasse à 0".
j'ai le début:
$file=@fopen ( ".txt" "r+" )
fscanf etc...
if ( $chiffre == 10 )
--->mais pas la suite! (comment demander de mettre a 0)
ensuite lorsque la variable est changée ou pas selon sa valeur initiale je lui applique autre chose:
$nb++
rewind etc....
fclose // j'incrémente de 1 et je ferme
if ( $chiffre == 10 )
header ("location:ça")
else header ("location:ou ça") //en fonction du résultat j'envoie vers 2 endroits différents.
exit;
-->Est- ce que je dois "ouvrir et fermer" le fichier .txt avant chaque "if" ? ou l'ouvrir avant le 1er "if" et le fermer à la fin?
Merci d'avance et désolé c'est pas très clair
N'hésitez pas à me dire si j'ai écrit n'importe quoi!!
-

Bacteries - WRInaute passionné

- Messages: 1369
- Inscription: 27 Mai 2004
Tu ouvres ton fichier.
Tu fais tes traitements (lecture, écriture)
Tu le ferme.
Pour ton chiffre remis à zéro, si tu sais écriture le chiffre incrémenté, tu sais écrire 0.
Sinon (pas testé, mais en gros) :
Tu fais tes traitements (lecture, écriture)
Tu le ferme.
Pour ton chiffre remis à zéro, si tu sais écriture le chiffre incrémenté, tu sais écrire 0.
Sinon (pas testé, mais en gros) :
- Code: Tout sélectionner
rewind($file);
if ($chiffre >= 10) {
fwrite($file,"0");
} else {
fwrite($file,++$chiffre);
}
-

KOogar - WRInaute accro

- Messages: 3884
- Inscription: 16 Nov 2004
ouvre le fichier, met le contenu dans $chiffre, test si c'est egal a 10 et remet le fichier a 0 si oui.
- Code: Tout sélectionner
<?php
if (!($f=fopen("fichier.txt","r+")))
exit("Impossible d'ouvrir le fichier.");
if(file_exists($f)) {
$chiffre = file($f);
echo $chiffre;
}
$chiffre_nul = 0;
if ( $chiffre == 10 ) fwrite($f, $chiffre_nul);
fclose($f);
?>
- djon77
- Nouveau WRInaute

- Messages: 33
- Inscription: 26 Jan 2008
Merci beaucoup pour vos réponses!
et
marchent tout les deux...
J'ai mis 1 des 2 apres ça:
et
a la fin
et tout marche très bien.
Encore merci! Je commence à piger le fonctionnement^^
Ps:savez-vous si 1 des 2 codes est meilleur que l'autre et pourquoi?
- Code: Tout sélectionner
rewind($file);
if ($chiffre == 10) {
fwrite($file,"0");
et
- Code: Tout sélectionner
rewind($file);
$chiffre_nul = 0;
if ( $chiffre == 10 )
fwrite($f, $chiffre_nul);
marchent tout les deux...
J'ai mis 1 des 2 apres ça:
- Code: Tout sélectionner
if ($count == 10) {
header("Location:10.html");
} else {
header("Location:20.html");
}
et
- Code: Tout sélectionner
fclose($file);
exit;
?>
a la fin
et tout marche très bien.
Encore merci! Je commence à piger le fonctionnement^^
Ps:savez-vous si 1 des 2 codes est meilleur que l'autre et pourquoi?
- djon77
- Nouveau WRInaute

- Messages: 33
- Inscription: 26 Jan 2008
Ah?
C'est du à quoi?
Voilà ce que ça donne au final (j'ai décrémenté au lieu d'incrémenter et ça repasse à 5 lorsque le compteur arrive à 0):
Ets-ce que c'est correct?
J'ai l'impression que le changement de 0 à 5 s'effectue avant la redirection...Ou alors au moment de fclose?
fclose risque de ne pas s'exécuter? Est-ce embêtant?
j'en profite pour vous demander ce que veut dire:
Encore merci!
C'est du à quoi?
Voilà ce que ça donne au final (j'ai décrémenté au lieu d'incrémenter et ça repasse à 5 lorsque le compteur arrive à 0):
- Code: Tout sélectionner
<?php
header("Pragma: no-cache");
$file=@fopen("fichier.txt", "r+");
fscanf($file, "%d", $count);
$count--;
rewind($file);
fputs($file, $count);
rewind($file);
$final=5;
if ($count <= 0) {
fwrite($file,"$final");
}
rewind($file);
if ($count == 0) {
header("Location:10.html");
} else {
header("Location:20.html");
}
fclose($file);
exit;
?>
Ets-ce que c'est correct?
J'ai l'impression que le changement de 0 à 5 s'effectue avant la redirection...Ou alors au moment de fclose?
fclose risque de ne pas s'exécuter? Est-ce embêtant?
j'en profite pour vous demander ce que veut dire:
- Code: Tout sélectionner
fscanf($file, "%d", $count);
Encore merci!
-

KOogar - WRInaute accro

- Messages: 3884
- Inscription: 16 Nov 2004
%d fonctionne comme un masque et capture selon la valeur du masque. "d" est traité comme un entier donc c'est parfait pour ce que tu veux faire.
Le résultat de cette capture est placé dans la variable $count.
Pour ton code, remplace le dernier rewind($file) (qui ne sert a rien au passage) par fclose($file)
Le fichier doit être fermé avant la redirection sinon il reste ouvert en écriture.
essaye aussi en enlevant tout ces rewind, par defaut ton curseur sera toujours sur le premier élément.. pour moi ils sont inutiles.
Le résultat de cette capture est placé dans la variable $count.
Pour ton code, remplace le dernier rewind($file) (qui ne sert a rien au passage) par fclose($file)
Le fichier doit être fermé avant la redirection sinon il reste ouvert en écriture.
essaye aussi en enlevant tout ces rewind, par defaut ton curseur sera toujours sur le premier élément.. pour moi ils sont inutiles.
- Code: Tout sélectionner
<?php
header("Pragma: no-cache");
$file=@fopen("fichier.txt", "r+");
fscanf($file, "%d", $count);
$count--;
fwrite($file,"$count");
if ($count== 0) fwrite($file,"5");
fclose($file);
if ($count == 0) header("Location:10.html");
else header("Location:20.html");
exit;
?>
- djon77
- Nouveau WRInaute

- Messages: 33
- Inscription: 26 Jan 2008
D'accord.
J'ai dû laisser les 2 premiers rewind sinon ca rajoutait des chiffres a la suite des autres..
J'ai mis fclose avant la redirection.
Les { ne servent à rien: C'est une ancienne écriture?
Ah je viens de remarquer un petit souci: si je décrémente a partir de 10 ca donne 90 !
J'ai lu quelque part une histoire de nombre de caractères à préciser mais je ne retrouve plus la source !
J'ai dû laisser les 2 premiers rewind sinon ca rajoutait des chiffres a la suite des autres..
J'ai mis fclose avant la redirection.
Les { ne servent à rien: C'est une ancienne écriture?
Ah je viens de remarquer un petit souci: si je décrémente a partir de 10 ca donne 90 !
J'ai lu quelque part une histoire de nombre de caractères à préciser mais je ne retrouve plus la source !
-

Bacteries - WRInaute passionné

- Messages: 1369
- Inscription: 27 Mai 2004
Passer un peu de temps à faire de l'agorithmique ça peut aider pas mal hein?; )
Les '{' sont optionnel si tu as qu'une seule instruction à réaliser après une condition. Mais généralement il est préférable de les mettre par souci de lisibilité.
Les '{' sont optionnel si tu as qu'une seule instruction à réaliser après une condition. Mais généralement il est préférable de les mettre par souci de lisibilité.
-

KOogar - WRInaute accro

- Messages: 3884
- Inscription: 16 Nov 2004
djon77 a écrit:Ah je viens de remarquer un petit souci: si je décrémente a partir de 10 ca donne 90 !
J'ai lu quelque part une histoire de nombre de caractères à préciser mais je ne retrouve plus la source !
sry, je n'avais pas vu le mode...
enleve les rewind() et change de mode :
fopen("fichier.txt", "w+")
w : réduit la taille du fichier à 0 (ca le vide)
.. en meme temps tu n'auras plus ce probleme de 0 puisque lorsque tu vas decrementer de 10 a 9, tu ne laisseras plus le 0 derriere toi.
- djon77
- Nouveau WRInaute

- Messages: 33
- Inscription: 26 Jan 2008
euh....du coup ça redirige a chaque fois vers 10.html.
Apparemment ça prend directement $count=0 et re-écrit le fichier à 12.
J'ai fait une erreur ou oublié quelque chose?
- Code: Tout sélectionner
<?php
header("Pragma: no-cache");
$file=@fopen("fichier.txt", "w+");
fscanf($file, "%d", $count);
$count--;
fwrite($file,"$count");
if ($count== 0) fwrite($file,"12");
fclose($file);
if ($count == 0) header("Location:10.html");
else header("Location:20.html");
exit;
?>
Apparemment ça prend directement $count=0 et re-écrit le fichier à 12.
J'ai fait une erreur ou oublié quelque chose?
-

KOogar - WRInaute accro

- Messages: 3884
- Inscription: 16 Nov 2004
- Code: Tout sélectionner
<?php
if (file_exists($fichier_text))
{
if($res = fopen($fichier_text,"r+"))
{
while(!feof($res))
{ $result[]= fgets($res,1000000); }
fclose($res);
$tab=$result;
$result=$tab[0];
}
}
$result--;
$file = fopen($fichier_text, "w");
if ($result == 0) { fwrite($file,"12"); }
else { fwrite($file,"$result"); }
fclose($file);
if ($result == 0) header("Location:10.html");
else header("Location:20.html");
?>
j'ai repris un de mes codes pour aller + vite, en theorie ca devrait fonctionner du premier coup!
important: ouvre ton fichier en ecriture -> chmod 777
- djon77
- Nouveau WRInaute

- Messages: 33
- Inscription: 26 Jan 2008
Merci c'est parfait!
J'avoue que je commençais à désespérer un peu..
Je me doutais que le mode "w" devait s'appliquer uniquement à une partie mais ne m'y connaissant pas j'étais un peu perdu..
Alors quand j'ai lu "chmod 777" j'me suis dit que j'allais abandonner...Mais finalement j'ai compris vaguement le principe.
Par contre en laissant a 644 ça marche (peut-être que chez moi?), faut-il mettre qd même le fichier txt à 777?
En tout cas merci pour toutes ces explications et votre patience, je n'y serais jamais arrivé tout seul!
J'avoue que je commençais à désespérer un peu..
Je me doutais que le mode "w" devait s'appliquer uniquement à une partie mais ne m'y connaissant pas j'étais un peu perdu..
Alors quand j'ai lu "chmod 777" j'me suis dit que j'allais abandonner...Mais finalement j'ai compris vaguement le principe.
Par contre en laissant a 644 ça marche (peut-être que chez moi?), faut-il mettre qd même le fichier txt à 777?
En tout cas merci pour toutes ces explications et votre patience, je n'y serais jamais arrivé tout seul!
-

KOogar - WRInaute accro

- Messages: 3884
- Inscription: 16 Nov 2004
Le probleme des fichiers textes est du aux differents serveurs(Linux, Windows...), qui handle les fichiers textes differement. Sur certain serveur, si tu n'ouvres pas, ca plante, sur d'autres c'est l'inverse.
Tu peux ajouter ces 2 lignes de code avant l'ouverture et aprés, encore une fois, tout depend du serveur car pour commencer certain serveurs ne supportent même pas la fonction chmod ci dessous:
Tu peux ajouter ces 2 lignes de code avant l'ouverture et aprés, encore une fois, tout depend du serveur car pour commencer certain serveurs ne supportent même pas la fonction chmod ci dessous:
- Code: Tout sélectionner
chmod ($fichier_text, 0777);
$f = fopen($fichier_text, "w");
fwrite($f,"blablabla");
fclose($f);
chmod ($fichier_text, 0755);
- mahdivitche
- WRInaute impliqué

- Messages: 967
- Inscription: 6 Jan 2008
cree un fichier compteur.txt et mettre 0 a l'interieure
<?
$fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
$nbvisites = fgets($fp,11); // 2.On récupère le nombre dans le fichier
$nbvisites++; // 3.On incrémente le nombre de visites(+1)
fseek($fp,0); // 4.On se place en début de fichier
fputs($fp,$nbvisites); // 5.On écrit dans le fichier le nouveau nb
fclose($fp); // 6.On ferme le fichier
print("$nbvisites visiteurs"); // 7.On affiche le compteur à l'écran
?>
<?
$fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
$nbvisites = fgets($fp,11); // 2.On récupère le nombre dans le fichier
$nbvisites++; // 3.On incrémente le nombre de visites(+1)
fseek($fp,0); // 4.On se place en début de fichier
fputs($fp,$nbvisites); // 5.On écrit dans le fichier le nouveau nb
fclose($fp); // 6.On ferme le fichier
print("$nbvisites visiteurs"); // 7.On affiche le compteur à l'écran
?>
16 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Double compteur dans un fichier texte
- fichier.php.jpg == fichier.php sous free !!
- Problème compteur PHP
- Compteur de visites en Php
- PHP et script compteur de clic
- erreur avec un compteur php
- script PHP compteur visite
- Compteur de visites CGI ou PHP
- upload de fichier via PHP : taille variable du fichier créé
- PHP-> besoin d'aide pour un compteur de clique
Consultez la description détaillée des produits ou services de Google suivants : Google PowerMeter
Qui est en ligne
Utilisateurs parcourant ce forum: salva et 0 invités
