Accueil > > > CLASSE : COMPTEUR DE VISITEURS CONNECTÉS AU SITE
CLASSE : COMPTEUR DE VISITEURS CONNECTÉS AU SITE
Information sur la source
Description
Petite classe permettant d'afficher, sans base de données, le nombre de connectés sur son site. N'hésitez pas à me suggérer des améliorations.
Source
- <?php
-
- if (!class_exists('counter'))
- {
-
- /*
-
- -------------------------------------------
- Classe permettant d'afficher le nombre de
- connectés d'un site sans base de données.
- ------------------------------------------
-
- */
-
- class counter
- {
- var $dir;
-
- var $file;
-
- var $idle;
-
- var $userIp;
-
- var $cache_file;
-
- var $cache_time;
-
- var $cache_filename;
-
- /*
- $count : Gardera en mémoire le nombre de connectés.
- */
-
- var $count = false;
-
- /*
-
- Constructeur
-
- */
-
- function counter($dir = 'howmany/', $idle = 300, $cache_time = 60, $cache_filename = 'cache.txt')
- {
- $dir = substr($dir, -1) == '/' ? $dir : $dir . '/';
-
- if (!is_dir($dir))
- {
- mkdir($dir);
- }
-
- $this->dir = $dir;
-
- $this->idle = $idle;
-
- $this->userIp = $this->getIp();
-
- $this->file = $this->dir . md5($this->userIp);
-
- $this->cache_filename = $cache_filename;
-
- $this->cache_file = $this->dir . $cache_filename;
-
- $this->cache_time = $cache_time;
- }
-
- /*
-
- update : Met à jour le fichier de l'utilisateur courant
-
- */
-
- function update()
- {
- if (!@file_exists($this->file) || !@touch($this->file))
- {
- fopen($this->file, 'w');
- }
- }
-
- /*
-
- garbage : Nettoie le dossier - Suppréssion des fichiers obsolètes
-
- */
-
- function garbage()
- {
- $timeCacheVerif = time() - $this->cache_time;
-
- if ($h = opendir($this->dir))
- {
- while (false !== ($f = readdir($h)))
- {
- if ($f != '.' && $f != '..' && $f != $this->cache_filename)
- {
- $cfp = $this->dir . '/' . $f;
-
- if (@filemtime($cfp) < $timeVerif)
- {
- @unlink($cfp);
- }
- }
- }
- }
- }
-
- /*
-
- view : Affiche le nombre de connectés au site
-
- */
-
- function view($text = true)
- {
- if ($this->count !== false)
- {
- $nb = $this->count;
- }
- else
- {
- $nb = $this->count();
- }
-
- return $nb . ($text ? ' connecté' . ($nb>1?'s':'') : '');
- }
-
- /*
-
- getIp : Renvoie l'adresse IP de l'utilisateur
-
- */
-
- function getIp()
- {
- if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
- {
- $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
- }
- elseif (isset($_SERVER['HTTP_CLIENT_IP']))
- {
- $ip = $_SERVER['HTTP_CLIENT_IP'];
- }
- else
- {
- $ip = $_SERVER['REMOTE_ADDR'];
- }
-
- return $ip;
- }
-
- /*
-
- count : Retourne le nombre de connectés
-
- */
-
- function count()
- {
- //clearstatcache();
-
- $ok = false;
-
- $timeCacheVerif = time() - $this->cache_time;
-
- if (file_exists($this->cache_file) && @filemtime($this->cache_file) > $timeCacheVerif)
- {
- $content = $this->read($this->cache_file);
-
- $key = substr($content, 0, 32);
-
- $i = substr($content, 32);
-
- if ($key == md5($i))
- {
- $ok = true;
- }
- }
-
- if (!$ok)
- {
- if (!is_dir($this->dir)) return false;
-
- $timeVerif = time() - $this->idle;
-
- $i = 0;
-
- if ($h = opendir($this->dir))
- {
- while (false !== ($f = readdir($h)))
- {
- if ($f != '.' && $f != '..' && $f != $this->cache_filename)
- {
- $cfp = $this->dir . '/' . $f;
-
- if (@filemtime($cfp) > $timeVerif)
- {
- $i++;
- }
- else
- {
- @unlink($cfp);
- }
- }
- }
- }
-
- $this->write($this->cache_file, md5($i) . $i, 'w');
- }
-
- $this->count = $i;
-
- return $this->count;
- }
-
- /*
-
- write : Ecrit dans un fichier
-
- */
-
- function write($file, $content, $mode = 'a')
- {
- $fp = fopen($file, $mode);
-
- if ($fp)
- {
- @flock($fp, LOCK_EX);
-
- @fwrite($fp, $content, strlen($content));
-
- @flock($fp, LOCK_UN);
-
- @fclose($fp);
-
- return true;
- }
-
- return false;
- }
-
- /*
-
- read : Lit dans un fichier
-
- */
-
- function read($file)
- {
- if (!@file_exists($file)) return false;
-
- $fp = @fopen($file, 'r');
-
- if ($fp)
- {
- @flock($fp, LOCK_SH);
-
- $content = @fread($fp, @filesize($file));
-
- @flock($fp, LOCK_UN);
-
- @fclose($fp);
-
- return $content;
- }
-
- return false;
- }
-
- }
-
- }
-
- ?>
<?php
if (!class_exists('counter'))
{
/*
-------------------------------------------
Classe permettant d'afficher le nombre de
connectés d'un site sans base de données.
------------------------------------------
*/
class counter
{
var $dir;
var $file;
var $idle;
var $userIp;
var $cache_file;
var $cache_time;
var $cache_filename;
/*
$count : Gardera en mémoire le nombre de connectés.
*/
var $count = false;
/*
Constructeur
*/
function counter($dir = 'howmany/', $idle = 300, $cache_time = 60, $cache_filename = 'cache.txt')
{
$dir = substr($dir, -1) == '/' ? $dir : $dir . '/';
if (!is_dir($dir))
{
mkdir($dir);
}
$this->dir = $dir;
$this->idle = $idle;
$this->userIp = $this->getIp();
$this->file = $this->dir . md5($this->userIp);
$this->cache_filename = $cache_filename;
$this->cache_file = $this->dir . $cache_filename;
$this->cache_time = $cache_time;
}
/*
update : Met à jour le fichier de l'utilisateur courant
*/
function update()
{
if (!@file_exists($this->file) || !@touch($this->file))
{
fopen($this->file, 'w');
}
}
/*
garbage : Nettoie le dossier - Suppréssion des fichiers obsolètes
*/
function garbage()
{
$timeCacheVerif = time() - $this->cache_time;
if ($h = opendir($this->dir))
{
while (false !== ($f = readdir($h)))
{
if ($f != '.' && $f != '..' && $f != $this->cache_filename)
{
$cfp = $this->dir . '/' . $f;
if (@filemtime($cfp) < $timeVerif)
{
@unlink($cfp);
}
}
}
}
}
/*
view : Affiche le nombre de connectés au site
*/
function view($text = true)
{
if ($this->count !== false)
{
$nb = $this->count;
}
else
{
$nb = $this->count();
}
return $nb . ($text ? ' connecté' . ($nb>1?'s':'') : '');
}
/*
getIp : Renvoie l'adresse IP de l'utilisateur
*/
function getIp()
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif (isset($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
/*
count : Retourne le nombre de connectés
*/
function count()
{
//clearstatcache();
$ok = false;
$timeCacheVerif = time() - $this->cache_time;
if (file_exists($this->cache_file) && @filemtime($this->cache_file) > $timeCacheVerif)
{
$content = $this->read($this->cache_file);
$key = substr($content, 0, 32);
$i = substr($content, 32);
if ($key == md5($i))
{
$ok = true;
}
}
if (!$ok)
{
if (!is_dir($this->dir)) return false;
$timeVerif = time() - $this->idle;
$i = 0;
if ($h = opendir($this->dir))
{
while (false !== ($f = readdir($h)))
{
if ($f != '.' && $f != '..' && $f != $this->cache_filename)
{
$cfp = $this->dir . '/' . $f;
if (@filemtime($cfp) > $timeVerif)
{
$i++;
}
else
{
@unlink($cfp);
}
}
}
}
$this->write($this->cache_file, md5($i) . $i, 'w');
}
$this->count = $i;
return $this->count;
}
/*
write : Ecrit dans un fichier
*/
function write($file, $content, $mode = 'a')
{
$fp = fopen($file, $mode);
if ($fp)
{
@flock($fp, LOCK_EX);
@fwrite($fp, $content, strlen($content));
@flock($fp, LOCK_UN);
@fclose($fp);
return true;
}
return false;
}
/*
read : Lit dans un fichier
*/
function read($file)
{
if (!@file_exists($file)) return false;
$fp = @fopen($file, 'r');
if ($fp)
{
@flock($fp, LOCK_SH);
$content = @fread($fp, @filesize($file));
@flock($fp, LOCK_UN);
@fclose($fp);
return $content;
}
return false;
}
}
}
?>
Conclusion
Vos commentaires sont les bienvenus.
------------- UTILISATION ------------ -
include('counter.class.php'); $counter = new counter('howmany/', 60); $counter->update();
echo $counter->view();
Historique
- 07 mars 2008 12:19:33 :
- J'ai fais plusieurs modifications :
- Utilisation de PHP 4 au lieu de PHP 5.
- Résolution du problème d'écriture de fichier au même moment par X utilisateurs.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
cookies [ par Stephane ]
saluty a une source (excellente) qui parle des cookies.mais pas des cookies qui durent le plus longtemp possiblesavez vous comment faire ?en fait c'es
DONNER DES INFOS SUR LE VISITEUR [ par kindool ]
Bonjour, je recherche tout type de code php donnant des infos sur le visiteur du site, si vous en connaissez, merci de me répondre :)genre d'infos rec
etat de presence en php ? [ par sana72 ]
Bonjour, je souhaiterais savoir combien de personne est connecté sur le site et qui (lors de l'autenthification).En asp je fais ça avec le global.asa
Savoir qui est connecté. [ par Pyou ]
J'aimerais savoir comment fait-on pour savoir qui est connecté a un site en temps reel. J'utilise un moyen d'identification et les sessions.Merci
determiner connection visiteur [ par oggy ]
Bonjour !Voilà, j'aimerai savoir si vous connaissez un script en PHP ou autre permettant de connaitre le type de connection du visiteur (Adsl,Rtc...)J
Validité cookie ou pas pour visiteur [ par must ]
Bonjour,voila veux faire un compteur de visites,mais qu'il ne s'increment pas 40 fois si on viens sur la page souhaitéeKe veux me servir d'un cookie,m
Membre connecté... [ par houseclubber ]
Je débute en PHP et je voulais faire un petit exercice pour m'entraîner.En fonction que l'on soit identifié ou non sur le site, certaine rubriques son
script "qui est connecté" [ par Pouky ]
Bonjour!!j'ai une tite question:est ce que qqun pour m'expliquer en gros le fonctionnement des scripts "qui est connecté" (comme celui qui est sur ce
Authentification [ par erwan35 ]
Bonjour à tous!Je viens de commencer un site en php.Ce site est calqué sur le principe codes souces, c'est à dire qu'il sera une interface de libre éc
Ping sous php [ par juki_webmaster ]
Bonsoir , je voudrais avoir de l'aide pour crée un script php qui en utilisant une variable constente pingré une ip est afficherais sous forme :if ...
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
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 Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|