C'est un compteur de
visiteurs uniques pour
un laps de temps donné, j'ai trouvé ce code sur
la Toile
mais j'ai voulu l'améliorer en apportant quelques
corrections,
des tests, et une image. Tout d'abord la variable Apache
$_SERVER["REMOTE_ADDR"] contient l'adresse IP de l'internaute qui a
demandé la page, et avec un test et la fonction mkdir ( ) on
crée le répertoire "mesip".
On crée une
fonction PlusUn ( ), on teste l'existence du fichier
"compteur.txt". S'il n'existe pas on l'ouvre en
écriture et on le
crée (w), on écrit 0 puis on le ferme. S'il
existe on ouvre notre fichier en lecture et écriture (r+),
on lit la première ligne fgets ( ), on incrémente
le compteur d'une unité, on revient au début du
fichier fseek ( ), on écrit la nouvelle valeur et on le
ferme. Vient ensuite l'image qui intègre la variable
$nbrevisites.
Après cette fonction on teste l'existence du
cache. S'il n'existe pas on l'ouvre en écriture et on le
crée (w), de ce fait l'adresse IP est ajouté au
nom du fichier (compteur_cache) avec le .txt à la fin, alors
on écrit le timestamp dans ce même fichier, on le
ferme et on appelle notre fonction qui incrémentera une
visite. S'il
existe on ouvre notre fichier en lecture et écriture (r+),
on lit la première ligne fgets ( ) et donc le timestamp, si
cette dernière visite + 24h00 est inférieure
au time ( ) présent, on revient au début du
fichier fseek ( ), on écrit la nouvelle valeur time
( ), on appelle notre fonction qui incrémentera une visite
et
on ferme le fichier. L'image se trouvant dans la fonction, il
n'y aura pas d'incrémentation mais pas d'image non plus
au-dessous de 24h00.
Il nous faut rappeler l'image pendant les 24h00
où il n'y aura pas d'incrémentation. On ouvre le
fichier "compteur.txt" en lecture seule (r), on lit
la
première ligne fgets ( ), puis on le ferme. Et vient notre
image qui intègre la valeur courante de la variable
$nbrevisites.
<?php
$DossierCache = "mesip/compteur_cache";
$AdresseIP = $_SERVER["REMOTE_ADDR"];
if(!file_exists("mesip")) {
mkdir("mesip");
}
function PlusUn() {
if(!file_exists("compteur.txt")) {
$fp = fopen("compteur.txt","w");
fwrite($fp,"0");
fclose($fp);
}
$FichierCompteur = fopen("compteur.txt", "r+");
$nbrevisites = fgets($FichierCompteur,7);
$nbrevisites++;
fseek($FichierCompteur, 0);
fwrite($FichierCompteur,$nbrevisites);
fclose($FichierCompteur);
header ("Content-type: image/png");
$nbrevisites = str_pad($nbrevisites, 5, "0", STR_PAD_LEFT);
$image = @Imagecreate (80, 20);
$couleur = ImageColorAllocate ($image, 0, 0, 153);
$couleurs = ImageColorAllocate ($image, 255, 255, 255);
$font = 'Digital.ttf';
Imagettftext ($image, 15, 0, 1, 17, $couleurs, $font, $nbrevisites);
ImagePng ($image);
}
if(!file_exists($DossierCache.$AdresseIP.".txt")) {
$FichierCache = fopen($DossierCache.$AdresseIP.".txt", "w");
fwrite($FichierCache, time());
fclose($FichierCache);
PlusUn();
} else {
$FichierCache = fopen($DossierCache.$AdresseIP.".txt", "r+");
$DerniereVisite = fgets($FichierCache);
if($DerniereVisite+86400<time()) {
fseek($FichierCache, 0);
fwrite($FichierCache, time());
PlusUn();
}
fclose($FichierCache);
$FichierCompteur = fopen("compteur.txt", "r");
$nbrevisites = fgets($FichierCompteur,7);
fclose($FichierCompteur);
header ("Content-type: image/png");
$nbrevisites = str_pad($nbrevisites, 5, "0", STR_PAD_LEFT);
$image = @Imagecreate (80, 20);
$couleur = ImageColorAllocate ($image, 0, 0, 153);
$couleurs = ImageColorAllocate ($image, 255, 255, 255);
$font = 'Digital.ttf';
Imagettftext ($image, 15, 0, 1, 17, $couleurs, $font, $nbrevisites);
ImagePng ($image);
}
?>