Compteur PHP simple à améliorer

Résolu/Fermé
Cocoon2345 Messages postés 36 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 1 novembre 2011 - 18 oct. 2009 à 13:58
 Seb2000 - 31 mai 2013 à 15:32
Bonjour,

J'aimerais ajouter un compteur PHP simple sur mon site. Comme mes connaissances de PHP se réduisent pour l'instant à pas grand chose, j'ai cherché un code tout fait et j'en ai trouvé un qui a le mérite d'être bien expliqué et assez simple pour que je le comprenne, et en plus il fonctionne!

Oui mais voilà, il est apparemment un peu trop basique et il compte toutes les visites. Quelqu'un connait-il un moyen d'améliorer ce script pour identifier les sessions uniques?

Le code:

<?

// Variables de la fonte <font></font> :

$couleur = "#000099";
$police = "Vivaldi";
$taille = "5";

// On ouvre le fichier et on extrait les données :

$fichier = "compteur.txt";
$fp = fopen($fichier, "r");
if(!$fp) echo "Impossible d'ouvrir le fichier $fichier.";
$compteur = fgets($fp, 20);

// On vérifie le nombre de hits pour le pluriel et on affiche le compteur :

if($compteur == 1)
{
echo "<font color=$couleur size=$taille face=$police><b>$compteur</b></font> <font face=$police size=$taille color=#000000>visite au total.</font>";
}
else
{
echo "<font color=$couleur size=$taille face=$police><b>$compteur</b></font> <font face=$police size=$taille color=#000000>visites au total.</font>";
}

// On ferme le fichier :

fclose($fp);

// On incrémente de 1 le compteur :

$compteur++;

// On ecrit dans le fichier :

$fp2 = fopen($fichier, "w");
fwrite($fp2, $compteur);

// On ferme le fichier :

fclose($fp2);

?>

Merci d'avance pour votre aide,
Sara
A voir également:

10 réponses

Utilisateur anonyme
18 oct. 2009 à 15:05
Tu peux compter les visiteurs unique en récupérant leur ip, et en l'inscrivant dans un fichier txt ou une base de donnée. Comme ça, si quelqu'un visite le site, et que son ip est dans le fichier txt/la bdd, tu n'incrémente pas le compteur, sinon tu l'incrémente.
(pour récupérer l'ip, tu peux utiliser $_SERVER['REMOTE_ADDR'] ) :
<?php

// Variables de la fonte <font></font> :

$couleur = "#000099";
$police = "Vivaldi";
$taille = "5";

// On ouvre le fichier et on extrait les données :

$fichier = "compteur.txt";
$fp = fopen($fichier, "r");
if(!$fp) echo "Impossible d'ouvrir le fichier $fichier.";
$compteur = fgets($fp, 20);

// On vérifie le nombre de hits pour le pluriel et on affiche le compteur :

if($compteur == 1)
{
echo "<font color=$couleur size=$taille face=$police><b>$compteur</b></font> <font face=$police size=$taille color=#000000>visite au total.</font>";
}
else
{
echo "<font color=$couleur size=$taille face=$police><b>$compteur</b></font> <font face=$police size=$taille color=#000000>visites au total.</font>";
}

// On ferme le fichier :

fclose($fp);

// On incrémente de 1 le compteur :
if( !pregmatch("#".$_SERVER['REMOTE_ADDR']."#", $iplog) ){  //si l'ip n'est pas dans le fichier texte
     $compteur++;   // on incrémente
    $iplog = fopen('iplog.txt', "a+");   
    fwrite($iplog, $_SERVER['REMOTE_ADDR']); // et on ajoute l'ip au fichier texte
    fclose($iplog)
}

// On ecrit dans le fichier :

$fp2 = fopen($fichier, "w");
fwrite($fp2, $compteur);

// On ferme le fichier :

fclose($fp2);

?> 
1
Utilisateur anonyme
18 oct. 2009 à 14:15
Pour répondre à la question : Oui bien sûr c'est possible...

Mais je ne te donnerais pas la réponse pour la simple et bonne raison que tu vas vendre à des "clients" ce que les utilisateurs de ce site te donneront comme script pour te dépanner.

Il est donc hors de question que je prenne de mon temps libre pour que toi tu touches du fric sur mon dos...

Voilà !! Bonne journée et bon courage !
0
Cocoon2345 Messages postés 36 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 1 novembre 2011
18 oct. 2009 à 14:51
Ah tu en es resté là, dommage.

Il n'est donc pas possible d'être "webmaster amateur" et de créer des sites simples pour des amis, des clubs sportifs, des PME de campagne qui s'adressent à un amateur en toute connaissance de cause et lui offrent une rémunération adaptée à son niveau de compétence. Le club de ski de mon village de 1500 habitants ne s'adressera jamais à un professionnel pour faire leur site, ça ne correspond ni a leurs besoins, ni à leurs moyens.

Mon intention n'a jamais été de duper qui que ce soit sur mes compétences, ni d'essayer de m'enrichir sur le dos de qui que ce soit. Il y a dans tous les domaines des professionnels et des amateurs qui cohabitent. Si tu vas voir jouer une troupe de théâtre amateur tu es conscient que le niveau ne sera pas à la hauteur des acteurs professionnels, et pourtant tu trouves normal de payer ta place. Et cette troupe ne vas pas mettre en péril le travail des acteurs professionnels.

Tu t'es fait une fausse idée de moi et sur cette base tu es en train de griller toutes mes chances de trouver de l'aide ici, ce n'est pas très correct de ta part.

Il s'agissait simplement d'ajouter un compteur sur mon propre site et d'acquérir de nouvelles connaissances. Il est vrai que les connaissances que j'acquiers et que j'applique sur mon site sont susceptibles d'être utilisées une nouvelle fois ailleurs. Mais je ne vois pas ce qu'il y a de diabolique là-dedans, c'est le principe même de l'apprentissage.

J'espère simplement que ton intervention musclée, et je répète injustifiée, ne découragera pas d'autres personnes à essayer de m'aider.

Alors merci d'avance aux autres :-)
0
Cocoon2345 Messages postés 36 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 1 novembre 2011
18 oct. 2009 à 15:56
merci sonik21,

Alors récapitulons (je n'en suis qu'au chapitre 5 de l'apprentissage du PHP sur le site du zéro, alors je n'y comprends pas encore grand-chose)

On prends l'option d'inscrire l'IP dans un fichier .txt
Donc

je crée un fichier iplog.txt que j'upload à la racine du site.

j'ajoute ton bout de code dans mon fichier compteur.php pour incrémenter le compteur de 1 si le fichier iplog.txt ne contient pas l'IP

j'ai du louper un truc évident vu que ça marche pas, je dois créer une nouvelle variable?
0

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

Posez votre question
Utilisateur anonyme
18 oct. 2009 à 16:15
argh, j'avais oublié de récupérer le contenu de iplog.txt avant :
$iplog_ip = file_get_content('iplog.txt'); //récupère le contenu du fichier texte
if( !pregmatch("#$_SERVER['REMOTE_ADDR']#", $iplog_ip) ){  //si l'ip n'est pas dans le fichier texte
     $compteur++;   // on incrémente
    $iplog = fopen('iplog.txt', "a+");   
    fwrite($iplog, $_SERVER['REMOTE_ADDR']); // et on ajoute l'ip au fichier texte
    fclose($iplog);
}

0
Cocoon2345 Messages postés 36 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 1 novembre 2011
18 oct. 2009 à 16:24
:-((((
Toujours pas:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
0
Cocoon2345 Messages postés 36 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 1 novembre 2011
18 oct. 2009 à 17:08
Alors après avoir appliqué la syntaxe du premier message au 2e (il y avait quelques " et . en plus), j'ai ceci:

// On incrémente de 1 le compteur :
$iplog_ip = file_get_content('iplog.txt'); //récupère le contenu du fichier texte
if( !preg_match("#".$_SERVER['REMOTE_ADDR']."#", $iplog_ip) ){ //si l'ip n'est pas dans le fichier texte
$compteur++; // on incrémente
$iplog = fopen('iplog.txt', "a+");
fwrite($iplog, $_SERVER['REMOTE_ADDR']); // et on ajoute l'ip au fichier texte
fclose($iplog);
}

Maintenant je revoir mon compteur sur la page, si je rafraichis, il ne s'incrémente plus de 1 (donc c'est mieux), mais j'ai un nouveau message d'erreur:
Fatal error: Call to undefined function: file_get_content()
0
Cocoon2345 Messages postés 36 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 1 novembre 2011
18 oct. 2009 à 17:32
ok ça joue maintenant j'ai trouvé la faute de frappe:

file_get_contents
au lieu de
file_get_content

Donc le code définitif:
// On incrémente de 1 le compteur :
$iplog_ip = file_get_contents('iplog.txt'); //récupère le contenu du fichier texte
if( !preg_match("#".$_SERVER['REMOTE_ADDR']."#", $iplog_ip) ){ //si l'ip n'est pas dans le fichier texte
$compteur++; // on incrémente
$iplog = fopen('iplog.txt', "a+");
fwrite($iplog, $_SERVER['REMOTE_ADDR']); // et on ajoute l'ip au fichier texte
fclose($iplog);
}

sonik21, merci beaucoup et bonne soirée,
Sara
0
Utilisateur anonyme
18 oct. 2009 à 17:49
a oui désolé, j'ai zappé le "s", c'est file_get_contents()
0
Merci bcp, il marche super ton compteur :)
0