|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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 du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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 ...
|
Téléchargements
Logiciels à télécharger sur le même thème :
|