begin process at 2010 03 22 02:35:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE : COMPTEUR DE VISITEURS CONNECTÉS AU SITE

CLASSE : COMPTEUR DE VISITEURS CONNECTÉS AU SITE


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :connecté, visiteur, fichier texte Niveau :Débutant Date de création :04/03/2008 Date de mise à jour :07/03/2008 12:19:33 Vu :4 990

Auteur : porciner

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 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

RENVOI UN DOSSIER DE NOM UNIQUE ET ALÉATOIRE
RACCOURCIR UNE CHAINE AVEC UN SÉPARATEUR AU MILIEU
FONCTION QUI ESSAIE DE RETOURNER UNE DATE VALIDE COMME ELLE ...
MOTS TROP LONGS

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

COMPTEUR DE VISITEUR : PHP ET MYSQL par didguess
Source avec Zip LOCALISER LES VISITEURS DE VOTRE SITE SUR UNE CARTE par nlion
VISITEURS CONNECTÉS EN TEMPS RÉEL par Vyk12
TRACES DU VISITEUR D'UN SITE (IP, PROXY, IP_DERRIÈRE_PROXY,D... par dulxolix
Source avec Zip COMPTEUR DE VISITEURS UNIQUES AVEC BASE DE DONNÉE par linkid

Commentaires et avis

Commentaire de crocxx2 le 04/03/2008 17:19:13

C'est normal que tu ne déclare pas la porté de tes variables?

Commentaire de porciner le 04/03/2008 17:21:49

Non, pas vraiment :D
En fait je ne connais pas encore tous les mots clés de PHP5 pour les classes...
Quels sont-ils ?

Commentaire de codefalse le 04/03/2008 17:56:43 administrateur CS

Yop :)
Un ptit trucs que j'ai remarqué qui aurait pu t'éviter du code en plus :
Dans ton constructeur, tu met $file = 'inc/counter.txt', $time = false, $idle = false
le premier est bon, pourquoi tu fait pas pareil avec les autres ?
euh, voila :p

Commentaire de crocxx2 le 04/03/2008 18:54:08

Les attributs de ta classes (les variables) en PHP5 doivent être déclaré non pas avec VAR mais avec la porté (private,public,...) en général en POO, tu déclare les propriété (variables)en privé et les méthode (fonction) en publique sauf exception. ;)

Commentaire de codefalse le 04/03/2008 19:16:44 administrateur CS

En fait voila comme l'a dit crocxx2, en général, tu déclare tes variables private, afin de limiter l'acces à tes données depuis l'exterieur. Ensuite tu implémente des getters/setters (si ta une variable : private $sLogin, tu peux faire un setLogin et un getLogin pour que tes autres classes y accedent).
Généralement tu donne une propriété protected quand ta classe étends d'autres classes ou pourra être étendue, et que ses propriétés doivent être accessibles depuis les classes mères/filles. C'est LA différence avec private. Private, SEUL la classe elle même à accès aux variables et fonctions (appelées méthodes) private. En protected, une classe qui étends une autre classe ayant des éléments protected pourra y avoir acces.
Une propriété public permettra l'accès à tous les éléments.

Commentaire de porciner le 07/03/2008 12:34:41

Merci pour toutes ces infos :-)

Commentaire de crocxx2 le 07/03/2008 15:56:33

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. ;)

Commentaire de codefalse le 07/03/2008 17:04:00 administrateur CS

Non, sous php4 ca devrait fonctionner :)

Commentaire de crocxx2 le 07/03/2008 17:09:13

à 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 ;)

Commentaire de porciner le 07/03/2008 20:42:26

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.

Commentaire de niceman23 le 03/06/2008 01:40:18

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

 Ajouter un commentaire


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 ...


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales