-
-
Save pyrech/f14274861bcf4c2a1524396e70f9dc16 to your computer and use it in GitHub Desktop.
A wonderful live counter for your PHP website
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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