Aller au contenu

PHP, compter le nbr de visiteurs

Featured Replies

Posté(e)

Dans mon script php, j'aimerais compter le nombre de visiteurs qui sont actuellement en train de visiter le site. Chaque visiteur, qu'il soit loggé ou pas, a plusieures variables session, comme par exemple $_SESSION['id']

ce que je voudrais, c'est compter le nombre de $_SESSION['id']. C'est possible?

Si non, faudrait que je passe par une base de données. Y a moyen de faire en sorte qu'un champ mysql se supprime automatiquement apres 5 minutes?

Posté(e)

Pour compter le nombre de sessions ouvertes :

sur toutes les pages met :

<?
session_start(); // ouverture de la session
?>

et à lendroit où tu veut mettre le compteur :

<?
if ($fp=opendir(session_save_path())) { // ouverture du dossier où sont stocké les fichiers des sessions
  $count=0; // mise à 0 du compteur
  $session_timeout = 5*60; // temps de validité d'une session (ici 5*60 secondes soit 5 min)
  while (($file=readdir($fp))!==false) { // on liste les fichiers du répertoire
     if ($file!="." && $file!="..") {
        if (time()-fileatime(session_save_path()."/".$file)<$session_timeout) $count++; // si la date du dernier accès au fichier de la session est < à 5 min on incrémente le compteur
     }
  }
}
echo $count; // et on affiche le résulat
?>

Modifié par Country

Posté(e)
  • Auteur

y a un bug dans ton script mais j'arrive pas a le trouver. Ca m'a l'air d'etre quelque part dans le while()

En fait il me trouve aucune session. Il affiche toujours 0 à la fin, meme si j'ai 2 fichier session.

autre chose, si je modifie ton code comme ca:

while (($file=readdir($fp)!==FALSE))    // on liste les fichiers du répertoire
     {
       if ($file!="." && $file!="..")
       {
                                      
         if ( (time()-fileatime(session_save_path()."/".$file)) < $session_timeout )
           $count++;
       } 
           print session_save_path()."/".$file;
     }

la il affiche ceci

c:/temp/1c:/temp/1c:/temp/1c:/temp/1

bref, il trouve 4 fichiers, et il y en a en fait que 2

et ils ne s'appellent pas 1, mais un truc du genre "sess_6f37c596bff60dcce48c83f36e841498"

tu vois pourquoi?

Posté(e)

En effet j'avai une petite erreur dans le while, il faut mettre :

while (($file=readdir($fp))!==false) {

à la place de

while (($file=readdir($fp)!==false)) {

une ) n'était pas à la bonne place.

J'ai édité ma source au dessus par la même occasion

Voila, là ça marche :)

Posté(e)

ran-tan-plan : Ca fonctionne ?

Bon, j'ai pas tout lu désolé, mais 56K et timings serrés powa.

Pour des scripts tout fait, tu peut aller sur phpscripts-fr. C'est en général libre et souvent sous GPL.

Posté(e)
  • Auteur

uiui ca fonctionne nickel :ouioui:

en fait a la base je cherchais pas un script tout fait mais plutot une piste, pour pouvoir coder mon script a moi. Mais vu que Country m'a fait le script en entier, pourquoi pas :chinois:

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.