Vous êtes ici Codes PHP et MySQL > Statistiques > Compteur de connectés

 

Compteur de connectés

Classe PHP4 permettant d'afficher sans base de données le nombre de connectés au site.
 
asterix
Site de l'auteur voir
Code vu 6251 fois
Enregistré le 28 Mars 2008
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Compteur de connectés
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Compteur de connectés                                     */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts365-PHP.htm              */
/* Auteur         : asterix                                                   */
/* Date édition   : 28 Mars 2008                                              */
/* Website auteur : http://www.bloggif.com                                    */
/*                                                                            */
/******************************************************************************/

if (!defined('VERIF')) exit();

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 $cache_file;
  
  var $cache_time;
  
  var $cache_filename;
  
  var $cookie_name;
  
  /*
  $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'
                                    $cookie_name 'counterId')
  {
    $dir substr($dir, -1) == '/' $dir $dir '/';
    
    if (!is_dir($dir))
    {
      mkdir($dir);
    }
    
    $this->dir $dir;
        
    $this->idle $idle;
        
    $this->file $this->dir $this->userId();
    
    $this->cache_filename $cache_filename;
    
    $this->cache_file $this->dir $cache_filename;
    
    $this->cache_time $cache_time;
    
    $this->cookie_name $cookie_name;
  }
  
  /*
  
  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':'') : '');
  }

  /*
  
  userId : Renvoie un identifiant pour l'utilisateur
  
  */
  
  function userId()
  {
    if (isset($_COOKIE[$this->cookie_name]) && preg_match('`^([a-z0-9]{32})$`',
              $_COOKIE[$this->cookie_name]))
    {
      $cookId $retId $_COOKIE[$this->cookie_name];
      
      $fileIp $this->dir md5($this->getIp());

      if (file_exists($fileIp))
      {
        @unlink($fileIp);
      }
    }
    else // Première page vue
    {
      $cookId md5(uniqid(rand(), true));
      
      $retId md5($this->getIp());
    }
    
    if (!headers_sent())
    {
      setcookie($this->cookie_name$cookIdtime()+($this->idle*2), '/');
    }

    return $retId;
  }
  
  /*
  
  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($content032);
      
      $i substr($content32);
      
      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_filemd5($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($fpLOCK_EX);
      
      @fwrite($fp$contentstrlen($content));
            
      @flock($fpLOCK_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($fpLOCK_SH);
      
      $content = @fread($fp, @filesize($file));
      
      @flock($fpLOCK_UN);
      
      @fclose($fp);

      return $content;
    }
    
    return false;
  }

}

}

/*

UTILISATION

include('counter.class.php');
$counter = new counter('howmany/', 60);
$counter->update();

echo $counter->view();

*/

?>

 

Fonctions du code

: Vérifie l'existence d'une constante - (PHP 4, PHP 5)
: Affiche un message et termine le script courant - (PHP 4, PHP 5)
: Vérifie qu'une classe a été définie - (PHP 4, PHP 5)
: Retourne un segment de chaîne - (PHP 4, PHP 5)
: Indique si le fichier est un dossier - (PHP 4, PHP 5)
: Crée un dossier - (PHP 4, PHP 5)
: Vérifie si un fichier ou un dossier existe - (PHP 4, PHP 5)
: Modifie la date de modification et de dernier accès d'un fichier - (PHP 4, PHP...
: Ouvre un fichier ou une URL - (PHP 4, PHP 5)
: Retourne le timestamp UNIX actuel - (PHP 4, PHP 5)
: - (PHP 4, PHP 5)
: Lit une entrée du dossier - (PHP 4, PHP 5)
: Lit la date de dernière modification du fichier - (PHP 4, PHP 5)
: Efface un fichier - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
: Expression rationnelle standard - (PHP 4, PHP 5)
: Calcule le md5 d'une chaîne - (PHP 4, PHP 5, PECL hash:1.1-1.3)
: Génère une valeur aléatoire - (PHP 4, PHP 5)
: Génère un identifiant unique - (PHP 4, PHP 5)
: Indique si les en-têtes HTTP ont déjà été envoyés - (PHP 4, PHP 5)
: Envoie un cookie - (PHP 4, PHP 5)
: Verrouille le fichier - (PHP 4, PHP 5)
: Écrit un fichier en mode binaire - (PHP 4, PHP 5)
: Calcule la taille d'une chaîne - (PHP 4, PHP 5)
: Ferme un fichier - (PHP 4, PHP 5)
: Lit la taille d'un fichier - (PHP 4, PHP 5)
: Lecture du fichier en mode binaire - (PHP 4, PHP 5)
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

Statistiques

 
 

PHP

 
 
 
PHP 5 avancé Livre PHP

PHP 5 avancé
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité