Compteur PHP simple à améliorer [Résolu/Fermé]

Signaler
Messages postés
36
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
1 novembre 2011
-
 Seb2000 -
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

10 réponses


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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
1001
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
21 mars 2010
188
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 !
Messages postés
36
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
1 novembre 2011

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 :-)
Messages postés
36
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
1 novembre 2011

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?

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);
}

Messages postés
36
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
1 novembre 2011

:-((((
Toujours pas:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Messages postés
36
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
1 novembre 2011

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()
Messages postés
36
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
1 novembre 2011

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

a oui désolé, j'ai zappé le "s", c'est file_get_contents()
Merci bcp, il marche super ton compteur :)