Accueil > > > COMPTEUR DE PERSONNES PRÉSENTES SUR LE SITE
COMPTEUR DE PERSONNES PRÉSENTES SUR LE SITE
Information sur la source
Description
Ces fonctions permettent de compter le nombre de personne présentes sur le site au même moment.
La première fonction est à appeler à chaque chargement d'une page de votre site.
Elle prend trois arguments : un chemin de dossier (sans le slash) où seront stockées les infos relatives aux personnes, un nom qui sera utilisé par les deux cookies créés par le système (en plus d'un suffixe différent pour chacun) et un intervalle, c'est à dire le temps en secondes au bout duquel les personnes seront considérées comme déconnectées du site.
La deuxième fonction permet de lire le nombre de visiteurs actuellement, et par la même occasion de nettoyer les vieux fichiers. Elle prend le chemin du dossier et l'intervalle comme arguments.
L'identification se fait par cookies, mais pour éviter un surcomptage à cause d'une non-activation des cookies sur le navigateur d'un visiteur, le visiteur ne peut être compté qu'à sa deuxième visite, après que le script aie vérifié l'existence d'un cookie créé à la première visite.
Les visiteurs se voient attribuer un numéro, en fonction de la disponibilité. Pendant que la fonction effectue une boucle while avec le numéro de recherche allant en augmentant, elle teste si le fichier n'existe pas, ou si son âge est supérieur à l'intervalle (pour le remplacer).
Chaque visiteur a un code (un numéro unique, puisque tiré d'un fichier s'incrémentant à chaque fois), ainsi si il revient après la date de validité de son fichier (c'est à dire, la valeur "intervalle") il ne peut pas reprendre la même place, si elle est déjà prise par un autre.
Dans le fichier .php est incluse une autre fonction toute simple sur laquelle repose la principale, elle permet tout simplement d'écrire une valeur dans un fichier.
Source
- <?php
- function enregistrerValeur($chemin, $valeur) {
- $fp = fopen($chemin, 'w');
- fputs($fp, $valeur);
- fclose($fp);
- }
- function surveillerFrequentation($cheminDossier, $nomCookies, $intervalle) {
- // Variables
- $date = date("YmdHis");
- $trouverPlace = false;
- $expire = 365*24*3600;
- // Création du dossier et fichiers si nécessaire
- if (file_exists($cheminDossier.'/lNumPass.sys') == false) {
- @mkdir($cheminDossier);
- enregistrerValeur($cheminDossier.'/lNumPass.sys', '0');
- }
- // Vérification des cookies
- if ($_COOKIE['survNum'.$nomCookies] == "") {
- // Première visite (ou cookies désactivés)
- setcookie('survNum'.$nomCookies, 'premiereVisite', time()+$expire);
- } else if ($_COOKIE['survNum'.$nomCookies] == 'premiereVisite') {
- // Cookies activés -> on peut l'enregistrer dans la BDD
- $trouverPlace = true;
- } else {
- // A déjà un cookie -> vérification du numéro (il se peut que pour X raison ce soit un autre qui ait ce numéro désormais)
- if ($_COOKIE['survCode'.$nomCookies] == @file_get_contents($cheminDossier.'/'.$_COOKIE['survNum'.$nomCookies].'.cod')) {
- // On met à jour la date
- enregistrerValeur($cheminDossier.'/'.$_COOKIE['survNum'.$nomCookies].'.dat', $date);
- } else {
- // Numéro non valide -> retrouve une place
- $trouverPlace = true;
- }
- }
- if ($trouverPlace) {
- // Recherche d'une place
- $na = 0;
- while (true) {
- if (file_exists($cheminDossier.'/'.$na.'.dat') == false) {
- // Place libre !
- break;
- } else {
- $dateFichier = file_get_contents($cheminDossier.'/'.$na.'.dat');
- $age = $date-$dateFichier;
- if ($age > $intervalle) {
- // Trop vieux !
- break;
- }
- }
- $na++;
- }
- // Création des fichiers
- $codAct = file_get_contents($cheminDossier.'/lNumPass.sys');
- $codAct++;
- enregistrerValeur($cheminDossier.'/lNumPass.sys', $codAct);
- enregistrerValeur($cheminDossier.'/'.$na.'.dat', $date);
- enregistrerValeur($cheminDossier.'/'.$na.'.cod', $codAct);
- // Cookies
- setcookie('survNum'.$nomCookies, $na, time()+$expire);
- setcookie('survCode'.$nomCookies, $codAct, time()+$expire);
- }
- }
- function lireFrequentation($cheminDossier, $intervalle) {
- // Variables
- $date = date("YmdHis");
- $expire = 365*24*3600;
- $nombreTotal = 0;
- // Listage des fichiers
- $fichiers = glob($cheminDossier.'/*.dat');
- foreach($fichiers as $fichier) {
- $dateFichier = file_get_contents($fichier);
- $age = $date-$dateFichier;
- if ($age > $intervalle) {
- // Trop vieux : On le supprime, et on ne le compte pas
- unlink($fichier);
- unlink($cheminDossier.'/'.basename($fichier, '.dat').'.cod');
- } else {
- $nombreTotal++;
- }
- }
- return $nombreTotal;
- }
- ?>
<?php
function enregistrerValeur($chemin, $valeur) {
$fp = fopen($chemin, 'w');
fputs($fp, $valeur);
fclose($fp);
}
function surveillerFrequentation($cheminDossier, $nomCookies, $intervalle) {
// Variables
$date = date("YmdHis");
$trouverPlace = false;
$expire = 365*24*3600;
// Création du dossier et fichiers si nécessaire
if (file_exists($cheminDossier.'/lNumPass.sys') == false) {
@mkdir($cheminDossier);
enregistrerValeur($cheminDossier.'/lNumPass.sys', '0');
}
// Vérification des cookies
if ($_COOKIE['survNum'.$nomCookies] == "") {
// Première visite (ou cookies désactivés)
setcookie('survNum'.$nomCookies, 'premiereVisite', time()+$expire);
} else if ($_COOKIE['survNum'.$nomCookies] == 'premiereVisite') {
// Cookies activés -> on peut l'enregistrer dans la BDD
$trouverPlace = true;
} else {
// A déjà un cookie -> vérification du numéro (il se peut que pour X raison ce soit un autre qui ait ce numéro désormais)
if ($_COOKIE['survCode'.$nomCookies] == @file_get_contents($cheminDossier.'/'.$_COOKIE['survNum'.$nomCookies].'.cod')) {
// On met à jour la date
enregistrerValeur($cheminDossier.'/'.$_COOKIE['survNum'.$nomCookies].'.dat', $date);
} else {
// Numéro non valide -> retrouve une place
$trouverPlace = true;
}
}
if ($trouverPlace) {
// Recherche d'une place
$na = 0;
while (true) {
if (file_exists($cheminDossier.'/'.$na.'.dat') == false) {
// Place libre !
break;
} else {
$dateFichier = file_get_contents($cheminDossier.'/'.$na.'.dat');
$age = $date-$dateFichier;
if ($age > $intervalle) {
// Trop vieux !
break;
}
}
$na++;
}
// Création des fichiers
$codAct = file_get_contents($cheminDossier.'/lNumPass.sys');
$codAct++;
enregistrerValeur($cheminDossier.'/lNumPass.sys', $codAct);
enregistrerValeur($cheminDossier.'/'.$na.'.dat', $date);
enregistrerValeur($cheminDossier.'/'.$na.'.cod', $codAct);
// Cookies
setcookie('survNum'.$nomCookies, $na, time()+$expire);
setcookie('survCode'.$nomCookies, $codAct, time()+$expire);
}
}
function lireFrequentation($cheminDossier, $intervalle) {
// Variables
$date = date("YmdHis");
$expire = 365*24*3600;
$nombreTotal = 0;
// Listage des fichiers
$fichiers = glob($cheminDossier.'/*.dat');
foreach($fichiers as $fichier) {
$dateFichier = file_get_contents($fichier);
$age = $date-$dateFichier;
if ($age > $intervalle) {
// Trop vieux : On le supprime, et on ne le compte pas
unlink($fichier);
unlink($cheminDossier.'/'.basename($fichier, '.dat').'.cod');
} else {
$nombreTotal++;
}
}
return $nombreTotal;
}
?>
Conclusion
Cette source était développée à l'origine pour pouvoir compter le nombre d'abonnés à un flux RSS, en réglant l'intervalle à une semaine par exemple. Mais l'exemple d'un nombre de visiteurs simultanés est plus utile, je pense.
Et puis, je ne suis pas sûr que les navigateurs ne gèrent les cookies lors de la lecture d'un flux.
Pour l'utiliser, copier-collez-la dans un fichier .php, compteurVisiteurs.php par exemple. Ensuite, dans chacun de vos pages php, utilisez include() avec le chemin de votre page et appelez la fonction surveillerFrequentation() (attention, il ne doit pas y avoir de texte ou de echo avant).
Puis, à tout moment, vous pourrez appeler la fonction lireFrequentation() qui retournera le nombre de visiteurs actuellement sur le site.
Historique
- 20 juillet 2007 14:41:01 :
- J'avais oublié le S à "personnes", dans le titre >_> ...
- 20 juillet 2007 16:32:34 :
- Il restait une erreur dans le code, et j'avais laissé des fonctions superflues...
- 20 juillet 2007 18:30:03 :
- Remplacement de la fonction chargerValeur() par file_get_contents(), qui fait la même chose en mieux et qui est intégrée à PHP.
- 21 juillet 2007 13:21:06 :
- Eh bien, je me suis vraiment trompé de partout moi ! Je remplace dateComplete() qui n'est pas définie par date("YmdHis"). Et enlève un "m" à "supprimer"...
- 23 juillet 2007 13:37:26 :
- Ajout de l'explication de mise en place, utilisation de file_exists pour savoir si un fichier existe.
- 05 août 2007 20:40:50 :
- Remplacement des guillemets doubles inappropriés, fusion de deux echo() consécutifs.
- 11 août 2007 12:57:19 :
- Suppression d'un echo() utilisé pour le débogage.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
liste des personnes connectées [ par PIEDPIED13 ]
bonjour.Dans un site où les gens doivent choisir un pseudo en entrant, est ce qu'on peut obtenir la liste des "pseudo connectés" en passant par les va
RSS sans le design [ par morpheus262 ]
Bonjour,j ai developpé un systeme de flux RSS sur mon site, pas de probleme tout se passe bien le flux se met a jour, et mon lecteur de RSS (thunderbi
Compteur de clics sur un bouton [ par jipe32 ]
Bonjourje possede un moteur de recherches et je voudrais savoir si on pouvais compter le nombre de clics sur le bouton rechercher.merciJipe32
Compteur de clic sur un lien.... [ par astrosug44 ]
Bonjour,j'ai une page web en html ou je met à disposition de tous un logiciel gratuit...et je voudrait compter le nombre de clic sur le lien de télech
formulaire + compteur [ par babaslow ]
Bonjour, J'ai un problème de débutant avec ce script : [code] <?php
$commentaire = $_POST['commentaire']; $commentaire.="*"; $cpt = 1; if ($co
formulaire + compteur [ par babaslow ]
C'est bon, c'est résolu. @+++
Script php cookies [ par babaslow ]
Bonjour, J'aimerais savoir si vous connaissez un script php qui permet d'identifier un visiteur via un cookie et d'incrémenter un compteur pour ses
Flux rss sécurisé [ par lefter ]
Bonjour,je souhaiterai solicité votre savoir pour vous posez une petite question : Est-il possible de forcer un flux RSS seulement en liaison par
Flux RSS [ par piep14 ]
Bonjour, je cherche a diffuser sur mon site des news provenant de flux rss, c'est a dire en xml, mais je ne trouve pas !!!Merci de votre aide
compteur d'acces a une image [ par franco_se ]
bonjourje voudrais savoir s'il est possible de compter le nombre d'appel d'une image par un site distant?en fait, j'utilise une image sur un forum, et
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
RE : SONDAGE..RE : SONDAGE.. par phpAnonyme
Cliquez pour lire la suite par phpAnonyme RE : SONDAGE..RE : SONDAGE.. par TychoBrahe
Cliquez pour lire la suite par TychoBrahe
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|