A wonderful live counter for your PHP website
<?php | |
// Compteur instantané : | |
// ================================== | |
// Ce script met à jour le fichier /compteur-live/compteur-live.txt, dans lequel sont | |
// identifiés les visiteurs connectés sur le site. | |
// ----------------------------------------------------------------------------------- | |
// Le fichier /compteur-live/compteur-live.txt contient 2 lignes par visiteur connecté: | |
// - une ligne contenant son heure de connexion, | |
// - suivie d'une ligne contenant son adresse IP. | |
// Les visiteurs y sont classés par ordre chronologique: | |
// - de celui qui s'est connecté il y a le plus longtemps (en haut de fichier), | |
// - à celui qui s'est connecté le plus récemment (en bas de fichier). | |
// ----------------------------------------------------------------------------------- | |
// On lit chaque ligne du fichier /tmp/compteur-live.txt | |
// dans le tableau $compteur_live | |
$compteur_live = file_exists("/tmp/compteur-live.txt") ? file("/tmp/compteur-live.txt") : ''; | |
// ----------------------------------------------------------------------------------- | |
// On détermine quels sont les visiteurs à éliminer | |
// (ceux dont la dernière connexion date de plus de 5 minutes). | |
$premiere_ligne_a_garder = -2; // valeur virtuelle. Sera 0 au 1er passage dans la boucle... | |
do | |
{ // On boucle jusqu'à trouver le premier visiteur à ne pas eliminer, ou la fin de fichier. | |
$premiere_ligne_a_garder=$premiere_ligne_a_garder+2; // visiteur suivant | |
} while((date('U', strtotime('-300 seconds')) > $compteur_live[$premiere_ligne_a_garder]) && ($premiere_ligne_a_garder < count($compteur_live))); | |
// 300 secondes = 5 minutes. Cette durée est modifiable. | |
// ----------------------------------------------------------------------------------- | |
// On lit l'adresse IP du visiteur qui est en train de charger une page | |
if(isset($_SERVER["REMOTE_ADDR"])) | |
{ // Si on peut déterminer l'adresse IP | |
$ip_en_cours = $_SERVER["REMOTE_ADDR"]; | |
} | |
else | |
{ // sinon | |
$ip_en_cours = "Non identifiable"; | |
} | |
// ----------------------------------------------------------------------------------- | |
// on reconstitue le futur contenu du fichier dans la variable $compteur | |
$compteur = ""; | |
if($premiere_ligne_a_garder < count($compteur_live)) | |
{// des visiteurs à ne pas éliminer? | |
// Pour tous les visiteurs inscrits dans le fichier à ne pas éliminer... | |
for($i=$premiere_ligne_a_garder; $i<count($compteur_live); $i=$i+2) | |
{ | |
// Garder ce visiteur, sauf si c'est celui qui est en train de recharger | |
// une page (ceci afin déviter les doublons). | |
if(trim($compteur_live[$i+1]) != $ip_en_cours) | |
{ | |
$compteur .= trim($compteur_live[$i])."\n".trim($compteur_live[$i+1])."\n"; | |
} | |
} | |
} | |
// ----------------------------------------------------------------------------------- | |
// Enfin on ajoute le visiteur qui est en train de se connecter | |
$compteur .= date('U')."\n".$ip_en_cours; | |
// ----------------------------------------------------------------------------------- | |
// Et on écrit le tout dans le fichier | |
$pointeur = fopen("/tmp/compteur-live.txt","w"); | |
fputs($pointeur,$compteur); | |
fclose($pointeur); | |
// Récupération de la date | |
$date = getdate(); | |
$mois{1} = "Janvier"; | |
$mois{2} = "Février"; | |
$mois{3} = "Mars"; | |
$mois{4} = "Avril"; | |
$mois{5} = "Mai"; | |
$mois{6} = "Juin"; | |
$mois{7} = "Juillet"; | |
$mois{8} = "Août"; | |
$mois{9} = "Septembre"; | |
$mois{10} = "Octobre"; | |
$mois{11} = "Novembre"; | |
$mois{12} = "Décembre"; | |
$wjour{0} = "Dimanche"; | |
$wjour{1} = "Lundi"; | |
$wjour{2} = "Mardi"; | |
$wjour{3} = "Mercredi"; | |
$wjour{4} = "Jeudi"; | |
$wjour{5} = "Vendredi"; | |
$wjour{6} = "Samedi"; | |
$wjour = $wjour{$date['wday']}; | |
$mjour = $date['mday']; | |
$mois = $mois{$date['mon']}; | |
$annee = $date['year']; | |
$heure{0} = "00"; | |
$heure{1} = "01"; | |
$heure{2} = "02"; | |
$heure{3} = "03"; | |
$heure{4} = "04"; | |
$heure{5} = "05"; | |
$heure{6} = "06"; | |
$heure{7} = "07"; | |
$heure{8} = "08"; | |
$heure{9} = "09"; | |
$min{0} = "00"; | |
$min{1} = "01"; | |
$min{2} = "02"; | |
$min{3} = "03"; | |
$min{4} = "04"; | |
$min{5} = "05"; | |
$min{6} = "06"; | |
$min{7} = "07"; | |
$min{8} = "08"; | |
$min{9} = "09"; | |
if($date['hours'] < 10) $heure = $heure{$date['hours']}; | |
else $heure = $date['hours']; | |
if($date['minutes'] < 10) $min = $min{$date['minutes']}; | |
else $min = $date['minutes']; | |
$sec = $date['seconds']; | |
$temps = "le " . $wjour . " " . $mjour . " " . $mois . " " . $annee . " à " . $heure . ":" . $min; | |
$compteur_record = file_exists("/tmp/compteur-record.txt") ? file("/tmp/compteur-record.txt") : ''; | |
if((count($compteur_live)/2) >= $compteur_record[0]) | |
{ | |
$record = count($compteur_live)/2 . "\nLe record du nombre d’utilisateurs en ligne est de <strong>" . count($compteur_live)/2 . "</strong>, " . $temps; | |
$pointeur2 = fopen("/tmp/compteur-record.txt","w"); | |
fputs($pointeur2,$record); | |
fclose($pointeur2); | |
} | |
// Affichage des adresses IP des visiteurs connectés: | |
// ================================ | |
// Ce script lit le fichier /tmp/compteur-live.txt, dans lequel sont | |
// identifiés les visiteurs connectés sur le site. | |
// ----------------------------------------------------------------------------------- | |
// Le fichier /tmp/compteur-live.txt est créé et mis à jour par le "compteur | |
// live" présenté à http://www.actulab.com/script-php--visiteurs-connectes.php. | |
// Ce script nécessite donc l'installation préalable du "compteur live". | |
// ----------------------------------------------------------------------------------- | |
// On lit chaque ligne du fichier /tmp/compteur-live.txt dans le tableau | |
// $compteur_live pour pouvoir afficher les adresses IP des visiteurs. | |
$compteur_live = file("/tmp/compteur-live.txt"); | |
// ----------------------------------------------------------------------------------- | |
// Le fichier /tmp/compteur-live.txt contient 2 lignes par visiteur connecté: | |
// - une ligne contenant son heure de connexion, | |
// - suivie d'une ligne contenant son adresse IP. | |
// Le nombre de visiteurs connecté est donc la moitié du nombre de lignes du fichier. | |
$nb_de_visiteurs = count($compteur_live)/2; | |
// ----------------------------------------------------------------------------------- | |
// On lit l'adresse IP du visiteur qui est en train de charger la page pour pouvoir | |
// l'identifier parmi les visiteurs connectés | |
if(isset($_SERVER["REMOTE_ADDR"])) { // Si on peut déterminer l'adresse IP | |
$ip_en_cours = $_SERVER["REMOTE_ADDR"]; | |
} | |
else { // sinon | |
$ip_en_cours = "Non identifiable"; | |
} | |
// ----------------------------------------------------------------------------------- | |
// On affiche le nombre de visiteurs connectés | |
echo "Il y a ".$nb_de_visiteurs; | |
if($nb_de_visiteurs > 1) { | |
echo " visiteurs connectés sur le site. Leurs adresses IP sont:"; | |
} | |
else { | |
echo " visiteur connecté sur le site."; | |
if($nb_de_visiteurs == 1) { | |
echo " Son adresse IP est:"; | |
} | |
} | |
// La ligne suivante est facultative... mais nous apprécierions ;-) | |
echo" \n"; | |
// fin de la ligne facultative. | |
// ----------------------------------------------------------------------------------- | |
// On affiche les adresses IP de tous les visiteurs | |
for($i=0; $i<$nb_de_visiteurs; $i++) { | |
echo"- <a href=\"http://ip-api.com/#".$compteur_live[2*$i+1]."\" target=\"_blank\" title=\"+ d'infos sur cette adresse IP...\">".$compteur_live[2*$i+1]."</a>"; | |
// On détermine la présence de robots des moteurs de recherche parmi les visiteurs | |
$google1 = strpos($compteur_live[2*$i+1],"216.239.46"); | |
$google2 = strpos($compteur_live[2*$i+1],"64.68.8"); | |
$scooter1 = strpos($compteur_live[2*$i+1],"216.39"); | |
$scooter2 = strpos($compteur_live[2*$i+1],"209.73"); | |
$slurp = strpos($compteur_live[2*$i+1],"66.196"); | |
$voila = strpos($compteur_live[2*$i+1],"195.101.94"); | |
$fast = strpos($compteur_live[2*$i+1],"66.77.73"); | |
$msn = strpos($compteur_live[2*$i+1],"204.95.98"); | |
if(($google1 !== false) || ($google2 !== false)) { | |
echo" [Googlebot]"; | |
} | |
elseif(($scooter1 !== false) || ($scooter2 !== false)) { | |
echo" [Scooter]"; | |
} | |
elseif($slurp !== false) { | |
echo" [Slurp]"; | |
} | |
elseif($voila !== false) { | |
echo" [VoilaBot]"; | |
} | |
elseif($fast !== false) { | |
echo" [Fast Web Crawler]"; | |
} | |
elseif($msn !== false) { | |
echo" [MSNBot]"; | |
} | |
else{} | |
// On identifie le visiteur en cours parmi tous les visiteurs connectés | |
if($compteur_live[2*$i+1] == $ip_en_cours) { | |
echo" (c'est vous!)"; | |
} | |
echo" | |
\n"; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment