Classe : compteur de visiteurs connectés au site

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 163 fois - Téléchargée 19 fois

Contenu du snippet

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 / Exemple :


<?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();

A voir également

Ajouter un commentaire Commentaires
niceman23 Messages postés 36 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 27 février 2009
3 juin 2008 à 01:40
Salut, se petit bout code la est tu pour le nombre de visite sur ton siteweb. Ou le nombre de logged ???

Merci de m'éclaicire
porciner Messages postés 56 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 18 avril 2008
7 mars 2008 à 20:42
Oui j'ai utilisé PHP 4 car on m'a demandé une version compatible avec.
De plus, je ne maîtrise pas encore les subtilités orientées objets de PHP 5.
crocxx2 Messages postés 13 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 7 mars 2008
7 mars 2008 à 17:09
à oui désolé j'avais pas vu qu'il avais régressé à PHP4 ;)

Mais bon PHP4 est bientôt mort, il faudrait bientôt passer au 5 ;)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
7 mars 2008 à 17:04
Non, sous php4 ca devrait fonctionner :)
crocxx2 Messages postés 13 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 7 mars 2008
7 mars 2008 à 15:56
Actuellement je ne pense pas que ta classe fonctionne avec la déclaration des attributs avec var, mais peu être que je me trompe. Sauf erreur de ma part ta classe devrait retourner des erreur. ;)
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.