|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
COMPTEUR QUI NE COMPTE PAS LES RELOAD
Description
Bon, je vais reposter, visiblement, le premier est pas passé (aurais-je cliqué un peu violemment...) Donc, ce code source sert à faire un compteur honnête, c'est à dire qui ne recompte pas chaque fois que la personne recharge votre page... C'est moins drôle, mais c'est plus efficace à mon avis pour connaître la vraie fréquentation de son site (et pour moi, c'est loin d'être glorieux) Le fonctionnement, vu du dehors, est très simple : on l'appelle comme une image, en précisant un identifiant de la page (et oui, avec un seul source, on peut mettre facilement des compteurs sur toutes ses pages :-)) <img src="compte/Bruce_count.php?clef=ma_pag_d'accueil"> La clef, ou l'identifiant de page, doit être une chaine de caractère standard (c'est à dire que je ne sais pas ce que ça fera si vous mettez des epsaces, des caractères bizarres...) Donc, on ne met que des underscores et des lettres latines, ça évite les problèmes.
Source
- <?php
-
-
- // DEFAULT VARIABLES:
- $digit_dir = "digits"; // répertoire où sont stockées les images des chiffres
- $log_file = "log.txt"; // fichier de log
- $compteur = "compte.txt"; //fichier qui contient le compteur à proprement parler.
- $lasthit = "lasthit.txt"; // sert à ne pas compter deux fois en cas de reload
- $min_width = 5 ; // Nombre de chiffres à affihcer
-
- // les infos que me passent apache pour identifier l'utilisateur
- //global $HTTP_USER_AGENT;
- //global $REMOTE_ADDR;
- //global $HTTP_REFERER;
- //global $QUERY_STRING;
-
- function return_error_png($error_msg) {
-
- $img = ImageCreate(strlen($error_msg)*7, 13);
- $red = ImageColorAllocate($img, 255, 0, 0);
- $bg = ImageColorAllocate($img, 0, 0, 0);
-
- // Create background
- ImageFilledRectangle($img, 0, 0, strlen($error_msg)*7, 13, $bg);
- ImageString($img, 3, 0, 0, $error_msg, $red);
-
- ImagePNG($img);
- ImageDestroy($img);
-
- return;
- }
-
-
- function create_counter_png($number) {
- global $digit_dir, $min_width;
-
- $len = strlen(strval($number));
- if($len > $min_width) $width = $len;
- else $width = $min_width;
-
- if(!file_exists("$digit_dir/0.gif.png")) {
- return_error_png("No pngs in $digit_dir!");
- return;
- }
-
-
-
- $d0 = ImageCreateFrompng("$digit_dir/0.gif.png");
- $dx = ImageSX($d0);
- $dy = ImageSY($d0);
-
- $img = ImageCreate($width*$dx, $dy);
- ImageDestroy($d0);
-
- // Now, we must take each digit and represent it
-
- $xoff = $width*$dx;
-
-
- while($xoff > 0) {
- $digit = $number % 10; // This takes the less significant digit of the number
- $number = $number / 10; // Remove less significant digit
- $temp = ImageCreateFrompng("$digit_dir/$digit.gif.png"); // Get number representation
- $xoff = $xoff - $dx;
- ImageCopyResized($img, $temp, $xoff, 0, 0, 0, $dx, $dy, $dx, $dy);
- ImageDestroy($temp);
- }
-
- ImagePNG($img);
- ImageDestroy($img);
-
- return;
- }
-
- function lire_compteur ($clef,$compteur) {
-
- $compte=0;
-
- if (file_exists($compteur)) {
- $fd=fopen ($compteur,"r");
- while (! feof($fd)) {
- if (fscanf ($fd,"%s %d",&$clef_lue,&$valeur) == 2) {
- if ($clef_lue == $clef) {
- $compte = $valeur;
- }
- }
- }
- fclose ($fd);
- }
- return $compte;
- }
-
- function sauve_compteur ($clef,$compteur,$compte) {
-
- if (file_exists($compteur)) {
- $f_lis=fopen ($compteur,"r");
- $f_ecris=fopen($compteur.".temp","w");
- $trouve = false;
-
- while (! feof($f_lis)) {
- if (fscanf ($f_lis,"%s %d",&$clef_lue,&$valeur) == 2) {
- if ($clef_lue == $clef) {
- fwrite($f_ecris,"$clef $compte\n");
- $trouve = true;
- } else {
- fwrite ($f_ecris,"$clef_lue $valeur\n");
- }
- }
- }
- if ($trouve == false) {
- fwrite($f_ecris,"$clef $compte\n");
- }
- fclose ($f_lis);
- fclose ($f_ecris);
- // delete ($compteur);
- rename ($compteur.".temp",$compteur);
- } else {
- $f_ecris=fopen ($compteur,"w");
- fwrite($f_ecris,"$clef $compte\n");
- fclose ($f_ecris);
- }
- }
-
- function get_time_last_connection ($clef,$qui,$fichier) {
-
- // printf ("<BR>quand s'est connecté $qui en dernier?<BR>\n");
-
- if (!file_exists ($fichier)) {
- $last_connect = 0;
- }else {
-
- $last_connect = 0;
-
- $fd=fopen ($fichier,"r");
-
- while (!feof ($fd)) {
- if (fscanf ($fd,"%s %d",&$adresse,&$heure) == 2) {
- //printf ("$adresse $heure");
- if ($qui == $adresse) {
- $last_connect = $heure;
- }
- }
- }
- fclose ($fd);
- }
-
- return $last_connect;
- }
-
- function update_connec_info ($fichier,$qui) {
- $quand = time();
-
- if (!file_exists ($fichier)) {
- $fd=fopen ($fichier,"w");
- fwrite($fd,"$qui $quand\n");
- fclose ($fd);
- } else {
- $f_lis=fopen ($fichier,"r");
- $f_ecris=fopen($fichier.".temp","w");
- $trouve = false;
-
- while (! feof($f_lis)) {
- if (fscanf ($f_lis,"%s %d",&$qui_lu,&$quand_lu) == 2) {
- if ($qui_lu == $qui) {
- fwrite($f_ecris,"$qui $quand\n");
- $trouve = true;
- } else {
- fwrite ($f_ecris,"$qui_lu $quand_lu\n");
- }
- }
- }
- if ($trouve == false) {
- fwrite($f_ecris,"$qui $quand\n");
- }
- fclose ($f_lis);
- fclose ($f_ecris);
- rename ($fichier.".temp",$fichier);
- }
- return $quand;
- } //fin de la mise à jour de la dernière connection
-
- function compte_connection ($qui,$clef,$fichier_compteur,$fichier_lasthit) {
- $trigger = 180; //180 s entre deux valeur comptées
-
- $nombre=lire_compteur ($clef,$fichier_compteur);
- $derniere = get_time_last_connection ($clef,$qui,$clef.".".$fichier_lasthit);
- $now = update_connec_info ($clef.".".$fichier_lasthit,$qui);
- $nombre+=((($now-$derniere)>$trigger)?1:0);
- sauve_compteur ($clef,$fichier_compteur,$nombre);
-
- // printf ("<BR>derniere connex à $derniere\n<BR>");
- // print ("nombre de chargements $nombre\n<BR>");
- create_counter_png($nombre);
-
- }
-
-
- Header("Content-type: image/png");
- if (!isset ($clef)) {
- return_error_png ("crasse $clef");
- } else {
- compte_connection ($REMOTE_ADDR,$clef,$compteur,$lasthit);
- }
- ?>
<?php
// DEFAULT VARIABLES:
$digit_dir = "digits"; // répertoire où sont stockées les images des chiffres
$log_file = "log.txt"; // fichier de log
$compteur = "compte.txt"; //fichier qui contient le compteur à proprement parler.
$lasthit = "lasthit.txt"; // sert à ne pas compter deux fois en cas de reload
$min_width = 5 ; // Nombre de chiffres à affihcer
// les infos que me passent apache pour identifier l'utilisateur
//global $HTTP_USER_AGENT;
//global $REMOTE_ADDR;
//global $HTTP_REFERER;
//global $QUERY_STRING;
function return_error_png($error_msg) {
$img = ImageCreate(strlen($error_msg)*7, 13);
$red = ImageColorAllocate($img, 255, 0, 0);
$bg = ImageColorAllocate($img, 0, 0, 0);
// Create background
ImageFilledRectangle($img, 0, 0, strlen($error_msg)*7, 13, $bg);
ImageString($img, 3, 0, 0, $error_msg, $red);
ImagePNG($img);
ImageDestroy($img);
return;
}
function create_counter_png($number) {
global $digit_dir, $min_width;
$len = strlen(strval($number));
if($len > $min_width) $width = $len;
else $width = $min_width;
if(!file_exists("$digit_dir/0.gif.png")) {
return_error_png("No pngs in $digit_dir!");
return;
}
$d0 = ImageCreateFrompng("$digit_dir/0.gif.png");
$dx = ImageSX($d0);
$dy = ImageSY($d0);
$img = ImageCreate($width*$dx, $dy);
ImageDestroy($d0);
// Now, we must take each digit and represent it
$xoff = $width*$dx;
while($xoff > 0) {
$digit = $number % 10; // This takes the less significant digit of the number
$number = $number / 10; // Remove less significant digit
$temp = ImageCreateFrompng("$digit_dir/$digit.gif.png"); // Get number representation
$xoff = $xoff - $dx;
ImageCopyResized($img, $temp, $xoff, 0, 0, 0, $dx, $dy, $dx, $dy);
ImageDestroy($temp);
}
ImagePNG($img);
ImageDestroy($img);
return;
}
function lire_compteur ($clef,$compteur) {
$compte=0;
if (file_exists($compteur)) {
$fd=fopen ($compteur,"r");
while (! feof($fd)) {
if (fscanf ($fd,"%s %d",&$clef_lue,&$valeur) == 2) {
if ($clef_lue == $clef) {
$compte = $valeur;
}
}
}
fclose ($fd);
}
return $compte;
}
function sauve_compteur ($clef,$compteur,$compte) {
if (file_exists($compteur)) {
$f_lis=fopen ($compteur,"r");
$f_ecris=fopen($compteur.".temp","w");
$trouve = false;
while (! feof($f_lis)) {
if (fscanf ($f_lis,"%s %d",&$clef_lue,&$valeur) == 2) {
if ($clef_lue == $clef) {
fwrite($f_ecris,"$clef $compte\n");
$trouve = true;
} else {
fwrite ($f_ecris,"$clef_lue $valeur\n");
}
}
}
if ($trouve == false) {
fwrite($f_ecris,"$clef $compte\n");
}
fclose ($f_lis);
fclose ($f_ecris);
// delete ($compteur);
rename ($compteur.".temp",$compteur);
} else {
$f_ecris=fopen ($compteur,"w");
fwrite($f_ecris,"$clef $compte\n");
fclose ($f_ecris);
}
}
function get_time_last_connection ($clef,$qui,$fichier) {
// printf ("<BR>quand s'est connecté $qui en dernier?<BR>\n");
if (!file_exists ($fichier)) {
$last_connect = 0;
}else {
$last_connect = 0;
$fd=fopen ($fichier,"r");
while (!feof ($fd)) {
if (fscanf ($fd,"%s %d",&$adresse,&$heure) == 2) {
//printf ("$adresse $heure");
if ($qui == $adresse) {
$last_connect = $heure;
}
}
}
fclose ($fd);
}
return $last_connect;
}
function update_connec_info ($fichier,$qui) {
$quand = time();
if (!file_exists ($fichier)) {
$fd=fopen ($fichier,"w");
fwrite($fd,"$qui $quand\n");
fclose ($fd);
} else {
$f_lis=fopen ($fichier,"r");
$f_ecris=fopen($fichier.".temp","w");
$trouve = false;
while (! feof($f_lis)) {
if (fscanf ($f_lis,"%s %d",&$qui_lu,&$quand_lu) == 2) {
if ($qui_lu == $qui) {
fwrite($f_ecris,"$qui $quand\n");
$trouve = true;
} else {
fwrite ($f_ecris,"$qui_lu $quand_lu\n");
}
}
}
if ($trouve == false) {
fwrite($f_ecris,"$qui $quand\n");
}
fclose ($f_lis);
fclose ($f_ecris);
rename ($fichier.".temp",$fichier);
}
return $quand;
} //fin de la mise à jour de la dernière connection
function compte_connection ($qui,$clef,$fichier_compteur,$fichier_lasthit) {
$trigger = 180; //180 s entre deux valeur comptées
$nombre=lire_compteur ($clef,$fichier_compteur);
$derniere = get_time_last_connection ($clef,$qui,$clef.".".$fichier_lasthit);
$now = update_connec_info ($clef.".".$fichier_lasthit,$qui);
$nombre+=((($now-$derniere)>$trigger)?1:0);
sauve_compteur ($clef,$fichier_compteur,$nombre);
// printf ("<BR>derniere connex à $derniere\n<BR>");
// print ("nombre de chargements $nombre\n<BR>");
create_counter_png($nombre);
}
Header("Content-type: image/png");
if (!isset ($clef)) {
return_error_png ("crasse $clef");
} else {
compte_connection ($REMOTE_ADDR,$clef,$compteur,$lasthit);
}
?>
Conclusion
Le fonctionnement du script est très simple : il est appelé comme une image, donc il doit rendre une image (c'est le rôle du header à la fin). Ensuite, il vous identifie par votre ip. Il va voir dans compte combien de fois la page a été chargée, puis il va voir dans le fichier $clef.lasthit.txt à quand remonte votre dernière connexion. Si elle date de plus que $trigger secondes (réglé par défaut à 180), il compte, et dans tous les cas, il met à jour le fihcier lasthit. Pour marcher, il vous faudra : * un interpréteur php4 (à cause de la fonction fscan) * gd d'installé (avec une version qui peut lire les .png - chez Free, ça marche très bien) * un sous répertoire, précisé ar $digit_dir, qui contient 10 fichiers en .png, de même taille et de nom 0.gif.png => 9.gif.png (ils sont livrés dans le fichier zip joint) Pour le moment, pas de bug connu, mais si vous en trouvez, vous avez des questions, vous voulez causer, vous pouvez toujours me contacter par mail à florent.revvelut@free.fr ou aller voir mon site (qui se construit petit à petit) http://florent.revelut.free.Fr
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources de la même categorie
Commentaires et avis
|
Comparez les prix Nouvelle version

HTC Touch HD
Entre 25€ et 605€
|