Instantly share code, notes, and snippets.

@pyrech /compteur-live.php Secret
Last active Jun 19, 2017

Embed
What would you like to do?
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