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
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|