Comment faire un compteur de visite sans base de données ?
Pour créer un compteur de visite sans base de données, vous avez besoin d'avoir les autorisations nécessaires pour créer un fichier et écrire dedans.
Mon souhait était également de pouvoir ne pas prendre en compte certaines adresses IP, ainsi que les moteurs de recherche. Pour cela, j'utilise une méthode qui stocke les moteurs de recherche et un tableau qui contient les adresses IP dont je ne veux pas.

# Cette méthode retourne vrai si un moteur de recherche (défini dans le tableau $robots) est détecté
# et faux dans le cas contraire
function isRobot() {
        $robots = array("Googlebot", "crawler","Slurp","Fast","Scooter","VoilaBot","W3C","ask","exabot");
        $isRobot = false ;
        foreach($robots as $robot) {
                if (eregi($robot,$_SERVER["HTTP_USER_AGENT"])) {
                        $isRobot = true ;
                        break ;
                }
        }

        return $isRobot ;
}
 
Le tableau isRobot contient le HTTP_USER_AGENT du visiteur. On peut trouver la liste des HTTP_USER_AGENT des moteurs de recherche sur Internet.

J'utilise donc un tableau pour rejeter certaines adresses IP afin qu'elles ne viennent pas gonfler mon compteur.

$tab_IP_reject = array("88.184....", "195.220....", "127.0.0.1") ;
 
Je vais définir un cookie pour le visiteur connecté afin que mon compteur ne s'incrémente pas à chaque nouvelle page. Comme cela, un visiteur ne sera comptabilisé qu'une seule fois lors de sa visite sur le site.

if (! isset($_COOKIE["visite"])) {
        setcookie("visite", "visite", time()+3600);
        # récupération de l'adresse IP du visiteur
        $adresseIP = $_SERVER['REMOTE_ADDR'] ;
        ...
 
Si le cookie n'existe pas, on le crée avec une durée de vide d'une heure. Ce qui est largement suffisant pour une connexion sur un site Internet.
On récupère ensuite l'adresse IP du visiteur.

...
# on teste si on accepte l'IP ou non
$trouve = false ;
foreach($tab_IP_reject as $v) {
        if ( (strpos($adresseIP,$v) !== false) && (strpos($adresseIP,$v)==0) ) {
                $trouve = true ;
        }
}
...
 
Dans cette boucle, on teste si l'adresse IP fait partie des adresses IP rejetées

...
if ($trouve==false && ! isRobot()) {
                # Gestion du compteur
                # -------------------
                # Il faut que le fichier 'compteur.txt' existe
                if (file_exists("compteur.txt")) {
                        # le fichier existe, on récupère la valeur avant de l'incrémenter
                        $compteur = file_get_contents("compteur.txt") ;
                        $compteur++;

                        $fic = fopen("compteur.txt","w") ;
                        fwrite($fic,$compteur) ;
                }
                ...
 
Dans mon exemple, j'ai décidé que le fichier "compteur.txt" existe et qu'il contienne lors de sa création la valeur 0. Ensuite, il suffit de récupérer le contenu de ce fichier qui ne contient qu'un nombre, de l'incrémenter et enfin d'écrire la nouvelle valeur dans le fichier.

        ...
        # Gestion des adresses IP
        # -----------------------
        # récupération de l'adresse IP du visiteur
        $adresseIP = $_SERVER['REMOTE_ADDR'] ;
        $dateVisite = mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")) ;
       
        $temp = $adresseIP."__".$dateVisite."__".$_SERVER["HTTP_USER_AGENT"]."\n" ;
        $fic = fopen("visite.txt","a") ;
        fwrite($fic,$temp) ;
}
 
Dans mon exemple, je récupère également l'adresse IP du visiteur ainsi que le HTTP_USER_AGENT afin de les conserver dans un autre fichier ('visite.txt') pour pouvoir renseigner mon tableau isRobot afin de ne plus les prendre en compte.




 
laurent.rameil@free.fr