Carnet Wiki

Compter les visiteurs connectés de façon...

Version 4 — Mars 2012 Suske

Compter les visiteurs connectés de façon précise et réglable.

Testé avec Spip 2.1.10

J’ai utilisé précédemment le compteur habituel du couteau Suisse (basé sur le cache de Spi ?), et le nombre indiqué me semblait souvent incohérent. En fouillant le Web j’ai trouvé un petit morceau de code pour faire un « inclure » très simple qui indique précisément le nombre de visiteur connectés avec un temps de latence réglable.

Le temps de latence, c’est le temps d’inactivité (aucun clic) au delà duquel on considère que le lecteur est déconnecté. Ce temps influe considérablement sur le nombre de connectés mesuré. Plus ce temps est court, plus le nombre de connectés mesuré sera faible

Le principe est simple :

  • dans un répertoire accessible (p.ex. /tmp/) on crée un sous répertoire /compteur/
  • à chaque accès au site, on crée un fichier vide dont le nom est l’IP de l’appelant
  • si un fichier du même nom existe déjà on l’efface et on le remplace par le nouveau
  • on efface tous les fichiers plus âgés que la durée de latence.

On obtient ainsi un nombre de fichiers égal au nombre de connectés durant le temps de latence, on peut lire les IP de ces fichiers et leur durée de connexion à un instant donné.

Détail amusant : si on ajoute dans le « head » la balise <meta http-equiv="refresh" content="1800"> (1800 = 1/2 heure) avec un temps de latence d’ une heure, alors quelqu’un qui s’endort en laissant le PC allumé ouvert sur votre site sera considéré comme connecté en permanence, puisque toutes les 1/2 heures la page est rafraîchie alors que le temps de latence est d’une heure !

Dans le petit morceau de code, ce temps est réglé arbitrairement à 1 heure, mais chacun mettra ce qu’il veut.
Le compteur « inc-compteur.html » est à inclure à l’endroit où l’on veut afficher le nombre de connectés, de préférence dans un squelette utilisé pour toutes les pages comme l’entête ou le pied. Le temps de latence ($vie=60) peut être modifié. On l’inclura simplement dans le squelette avec <INCLURE{fond=inc-compteur}>.

Le fichier « inc-compteur.html » :

<?php
$rep = "./tmp/compteur/";
$dir = opendir($rep);
$Fnm = $rep.$_SERVER['REMOTE_ADDR'].".txt";
// Si le fichier existe, on le détruit
if (file_exists($Fnm)) unlink($Fnm);
// On crée un fichier vide du nom de l'IP du visiteur
$inF = fopen($Fnm,"w");
fclose($inF);
$online = ; $vie = 60; // minutes
// Lecture du dossier
while ($f = readdir($dir)) {
		if(is_file($rep.$f))
			if((time()-filectime($rep.$f))/60>$vie)
				unlink($rep.$f);
		else $online++;
}
	closedir($dir);
	// Affichage
	echo "Visiteurs connectés : ";
	echo $online;  
?>

Je suis néophyte en Php et Html, si vous voyez une incorrection cela ne sera pas étonnant ! Mais cela marche très bien et de manière fiable depuis 6 mois sur notre site www.plaisance-pratique.com (en bas à gauche)