Encore un compteur (désolé) : visiteurs uniques et hits

Description

OK, les compteurs sont surfaits. Je vous propose quand même le mien, qui compte les visiteurs uniques et hits et est simple à mettre en oeuvre...

Contenu du zip :
- create_table.php :
à lancer une fois pour créer la base de données.
- counter.php :
le script de compteur
- mapage.php :
une page exemple affichant le compteur
- count.txt :
le fichier enregistrant les hits et visiteurs. La première valeur est les hits, la deuxième les visiteurs uniques
- GNUGPL.txt :
The GNU General Public License :)

Requis : PHP et MySQL

Fonctionnement :
1. Entrez les info de votre base de données dans counter.php et create_table.php
2. Ouvrez create_table.php pour créer la table
3. Ajoutez include ("counter.php"); à l'endroit où vous voulez afficher le compteur
4. Euh... modifiez le look du compteur (facultatif mais bon là je crois que ça s'impose un peu)

Blabla légal :) : ce script est gratuit, vous pouvez le modifier/redistribuer sous les termes du GNU General Public License publié par la Free Software Foundation, soit la version 2 de la licence, ou (à votre convenance), n'importe quelle version ultérieure (voir le fichier readme).

Source / Exemple :


<?php
$db_host="127.0.0.1";		// PARAMETRES DB MYSQL
$db_user="username";
$db_pass="password";
$database="database_name";

mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
mysql_select_db($database) or die( "Unable to select database");

$tps_unique=3600*24;		// Entrez ici le temps, en secondes, pendant lequel vous voulez ne pas reconter le même IP comme un visiteur unique
$cfile="count.txt";		// Entrez ici le chemin du fichier où seront stockés les hits et visiteurs (nom compris ! :) )

/*	Cette partie du code est facultative, elle permet d'alléger une partie du code d'après, mais je ne sais pas si c'est un bon choix (ça fait une requête de plus à chaque hit !) alors je la mets en "option"
$date_limite=time()-$tps_unique;			// Tout d'abord, on supprime les visiteurs "périmés" :p
mysql_query("DELETE FROM iplog WHERE heure <$date_limite");

  • /
$now=time(); $IP=$_SERVER['REMOTE_ADDR']; $query = "SELECT * FROM iplog WHERE IP='$IP'"; $resultat = mysql_query($query); $unique=true; if(false!=($ligne = mysql_fetch_array ($resultat))) // Si l'IP existe dans la table { $heure_limite=$ligne['heure']+$tps_unique; if($now<$heure_limite) // Si l'IP a été ajouté il y a moins du temps $tps_unique, ce n'est pas un nouveau visiteur {$unique=false;} else // Si l'IP a été ajouté il y a plus de temps que $tps_unique, c'est un nouveau visiteur (donc $unique=true) et on renouvelle la table {mysql_query("UPDATE iplog SET heure='$now' WHERE IP ='$IP'");} } else { mysql_query("INSERT INTO iplog VALUES ('','$IP','$now')"); } mysql_close(); // ************ gestion de l'erreur de fichier manquant, vous pouvez la supprimer si vous ne compter pas supprimer le fichier de compteur if(!file_exists($cfile)) // Si le fichier de compteur n'existe pas, on le crée et on le met à zéro { $fp=fopen($cfile,"w"); fputs($fp, "0|0"); fclose($fp); } // ************ fin de gestion de l'erreur $fp=fopen($cfile,"r"); // On ouvre le fichier et on lit les deux valeurs $inp = fread($fp, filesize($cfile)); $tmpvar = explode('|', $inp); fclose($fp); $tmpvar[0]++; // On ajoute un hit if($unique!=false){$tmpvar[1]++;} // S'il le faut, on ajoute un visiteur $fp=fopen($cfile,"w"); // On met tout ça dans le fichier fputs($fp, $tmpvar[0]."|".$tmpvar[1]); fclose($fp); echo $tmpvar[0]. ' hits and ' .$tmpvar[1]. ' visitors.'; // Affichage des hits et des visiteurs, à modifier pour un meilleur look :) // Vous pouvez aussi ajouter une fonction pour mettre le s que s'il y a plus d'un visiteur, mais bon, le cas contraire est peu fréquent... :) ?>

Conclusion :


Ben c'est à peu près tout... les commentaires, critiques, idées d'optimisation, etc sont les bienvenus. Je mets ça dans la catégorie réseau & internet, sans grande conviction... :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.