Compteur php/fichier .txt

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

djon77
Nouveau WRInaute
 
Messages: 33
Inscription: Sam Jan 26, 2008 11:59

Compteur php/fichier .txt

Message le Jeu Avr 17, 2008 10:24

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!!


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Jeu Avr 17, 2008 11:19

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) :
Code: Tout sélectionner
rewind($file);
if ($chiffre >=  10) {
  fwrite($file,"0");
} else {
  fwrite($file,++$chiffre);
}


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3324
Inscription: Mar Nov 16, 2004 18:27

Message le Jeu Avr 17, 2008 11:49

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: Sam Jan 26, 2008 11:59

Message le Jeu Avr 17, 2008 12:30

Merci beaucoup pour vos réponses!

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?


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Jeu Avr 17, 2008 13:25

Tout ce qui est après le header() ne sera pas forcément exécute, donc attention aux erreurs.

djon77
Nouveau WRInaute
 
Messages: 33
Inscription: Sam Jan 26, 2008 11:59

Message le Ven Avr 18, 2008 12:31

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):

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
WRInaute accro
 
Messages: 3324
Inscription: Mar Nov 16, 2004 18:27

Message le Ven Avr 18, 2008 12:46

%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.

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: Sam Jan 26, 2008 11:59

Message le Ven Avr 18, 2008 13:54

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 !


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Ven Avr 18, 2008 14:08

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é.


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3324
Inscription: Mar Nov 16, 2004 18:27

Message le Ven Avr 18, 2008 14:58

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: Sam Jan 26, 2008 11:59

Message le Ven Avr 18, 2008 16:07

euh....du coup ça redirige a chaque fois vers 10.html.
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
WRInaute accro
 
Messages: 3324
Inscription: Mar Nov 16, 2004 18:27

Message le Ven Avr 18, 2008 18:07

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: Sam Jan 26, 2008 11:59

Message le Ven Avr 18, 2008 20:06

Merci c'est parfait! :D

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
WRInaute accro
 
Messages: 3324
Inscription: Mar Nov 16, 2004 18:27

Message le Dim Avr 20, 2008 12:53

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:

Code: Tout sélectionner
  chmod ($fichier_text, 0777);
  $f = fopen($fichier_text, "w");
  fwrite($f,"blablabla");
  fclose($f);
  chmod ($fichier_text, 0755);


mahdivitche
WRInaute passionné
WRInaute passionné
 
Messages: 902
Inscription: Dim Jan 06, 2008 0:33

Message le Dim Avr 20, 2008 15:14

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
?>

Compteur php/fichier .txt

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités