Table des matières
Niveau
..........
En rapport...

Introduction

Voici un code simple qui va vous permettre de compter les visiteur sur votre site.
Le script n'utilise pas de base de donnée, tous est stocké dans un fichier et les ips sont purgées selon un temps que vous définissez.

Code

php
function cmpt_visit($ip_file_cmpt, $timeout_cmpt = 36) {
// timeout_cmpt en heure
    $nbr_connect = 0;
    $nbr_connect_auj = 0;
    $var_ip='';
    $var_bool=false;
    if($fp = @file($ip_file_cmpt)) {
        $now_time = time();
        foreach ($fp as $record_cm) {
            if ((trim($record_cm) != '') && (strpos($record_cm,':')>0)) {
                $subdata = explode("\t", $record_cm);
                list($jour, $mois, $annee) = explode("/", substr($subdata[1], 0, 10));
                list($heure, $minute, $seconde) = explode(":", substr($subdata[1], 10, 18));
				$heure=trim($heure);
				$minute=trim($minute);
				$seconde=trim($seconde);
				$mois=trim($mois);
				$jour=trim($jour);
				$annee=trim($annee);
                // Prise du nombre de connecté (les 5 derniere minutes)
 
                if ($now_time < mktime($heure, $minute, $seconde, $mois, $jour, $annee) + 180) {
                    $nbr_connect++;
                }
                if (mktime(0, 0, 0, $mois, $jour, $annee) == mktime(0, 0, 0, date('m'), date('d'), date('Y'))) {
                    $nbr_connect_auj++;
                }
                // Si l'IP est là depuis plus du time-out
                if ($now_time < mktime($heure, $minute, $seconde, $mois, $jour, $annee) + 3600 * $timeout_cmpt) {
                    if ($_SERVER["REMOTE_ADDR"] == $subdata[0]) {
                        $var_bool = true;
                    }
                    $var_ip .= $record_cm;
                }
            }
        }
    }
    // Prise des infos
    $fp = fopen($ip_file_cmpt, "a+"); // Ouverture du fichier en Lecture / Ecriture
    $d = trim(fgets($fp, 100)); // vire le die
    $nbr_visit = trim(fgets($fp, 100)); // Prise du nombre de connectés
    $date_start = trim(fgets($fp, 100)); // Prise de la date
    // Création des bonnes valeurs
    if($nbr_visit == "") {
        $nbr_visit = 0;
        fputs($fp, "$nbr_visit\n");
    }
    if($date_start == "") {
        $date_start = date("d/m/Y");
        fputs($fp, "$date_start\n");
    }
    fclose($fp); // Fermeture fichier
    // On augmente si l'IP n'est pas encore connu...
    if ($var_bool == false) {
        $fp = @fopen($ip_file_cmpt, "w"); // Ouverture du fichier en écriture
        fputs($fp, '<?php die(); ?>'."\n");
        $nbr_visit++; // Augmentation du compteur
        fputs($fp, $nbr_visit."\n"); // Sauvegarde du nouveau nombre
        fputs($fp, $date_start."\n"); // Réécriture de la date
        $var_ip .= $_SERVER["REMOTE_ADDR"]."\t".date("d/m/Y H:i:s")."\n";
        fputs ($fp, $var_ip);
        fclose($fp);
        $nbr_connect++;
        $nbr_connect_auj++;
    }
    if ($nbr_connect==0) {
        $nbr_connect=1;
    }
    if ($nbr_visit==0) {
        $nbr_visit=1;
    }
    if ($nbr_connect_auj==0) {
        $nbr_connect_auj=1;
    }
    $retcmpt[0] = $date_start;
    $retcmpt[1] = $nbr_visit;
    $retcmpt[2] = $nbr_connect;
    $retcmpt[3] = $nbr_connect_auj;
    return $retcmpt;
}

Utilisation

L'utilisation est simple, il suffit de faire appel a la fonction :

php
<?php
$ret = cmpt_visit("moncompteur.txt",55);
?>
la fonction cmpt_visit prend 2 parametres :
- Le fichier où sont enregistré les données
- Le temps que reste mémorisé les IPs (en heure)

La fonction renvois un tableau de 4 valeurs :

php
<?php
$ret = cmpt_visit("moncompteur.txt",55);
echo "Enregistrement des visite depuis le ".$ret[0]."<br>";
echo "Nombre total de visite ".$ret[1]."<br>";
echo "En ce moment : ".$ret[2]."<br>";
echo "Aujourd'hui ".$ret[3]."<br>";
?>

iDo 27/02/2006 13:22