Version complète: sur le forum Webmaster Hub : Compteur visiteurs instantanés
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Cleden
Bonjour,

J'ai vu que Dan se la jouait pas mal avec ses illustres visiteurs connectés (Yahoo, Google, Adsense, Cleden etc) rolleyes.gif. J'aimerai savoir si vous ne connaitriez pas un script me permettant d'afficher les mêmes infos, c'est à dire:
- Les membres connectés,
- Les invités connectés,
- Les moteurs (pourquoi pas).

Je me doute qu'il me faudra adapter ce script à la table de mes membres. S'il n'existe pas de script '"tout faits", j'aimerais juste qu'on me donne la technique pour que je le tente avec mes petites mains.

Merci d'avance,
Loïc.
Dash
Dan utilise IPB => Regardez le code source d'IPB. Et pour exporter les fonctionnalites d'IPB dans une application PHP externe a IPB, rien ne vaut IPBSDK.

wink.gif
Cleden
CITATION(Dash @ vendredi 14 janvier 2005, 22h44)
Dan utilise IPB => Regardez le code source d'IPB. Et pour exporter les fonctionnalites d'IPB dans une application PHP externe a IPB, rien ne vaut IPBSDK.
wink.gif
*

Heu, je te remercie pour ta réponse smile.gif
J'imagine que le code d'IPB ne doit pas être simple pour le débutant en php que je suis.
N'existe-t-il pas une solution plus simple car je me vois mal aller fouiner dans le code d'IPB ?

Loïc.
Dash
il existe un manuel tres bien documente pour ipbsdk.
Mais soudain, je doute que la fonction list_online_members affiche aussi les robots... Juste les membres.
Real_Creatif
Slt,

Cleden, tu désires adapter ce script sur un forum ? un CMS ?
Cleden
CITATION(Real_Creatif @ samedi 15 janvier 2005, 09h48)
Slt,
Cleden, tu désires adapter ce script sur un forum ? un CMS ?
*

En fait, j'aimerai l'utiliser avec la table des membres de mon site www.ouetu.com
Comme vous pouvez le voir j'y ai déjà un script m'indiquant le nombre de visiteurs mais j'aimerai l'améliorer en précisant les membres connectés etc.

J'ai pensé ajouter une colonne dansla table de mes membres, j'updaterai celle-ci à chaque page pour y mettre le timestamp de la dernière action du membre. Mais j'ai peur que ce soit un peu lourd de le faire à chaque page.

Loïc.
fosseene
pour les compteur de connectés en direct je peux te proposer et sans pub
http://www.mon-compteur.com

fosseene
Ex-floodeur
CITATION(Dash @ samedi 15 janvier 2005, 00h01)
il existe un manuel tres bien documente pour ipbsdk.
Mais soudain, je doute que la fonction list_online_members affiche aussi les robots... Juste les membres.
*

Elle ne met que les membres...
Anonymus
Tout le principe du système est de considérer qu'un moteur est un membre à part entière.
Quand google arrive sur le site, il est considéré comme un membre, et loggé comme tel. wink.gif
martin
Perso, j'utilise un gestionaire de sessions php personnalisé et geré par mysql. Il me suffit d'une requete mysql pour avoir le nombre de membres ou de visiteurs connectés. ca marche très bien et très simplement.
Cleden
CITATION(Anonymus @ vendredi 21 janvier 2005, 11h12)
Tout le principe du système est de considérer qu'un moteur est un membre à part entière.
Quand google arrive sur le site, il est considéré comme un membre, et loggé comme tel. wink.gif
*

Oui, vu comme ça, c'est plus simple. Il ne me reste plus qu'à trouver comment reconnaitre les membres.

CITATION(martin @ dimanche 23 janvier 2005, 16h28)
Perso, j'utilise un gestionaire de sessions php personnalisé et geré par mysql. Il me suffit d'une requete mysql pour avoir le nombre de membres ou de visiteurs connectés. ca marche très bien et très simplement.
*

Pourrais-tu me dire ou trouver ce fameurx gestionnaire ?

Loïc.
martin
je te mettrai mon script en ligne lundi, là je l'ai pas sous la main... ;-)
martin
Le shéma de la table mysql :
CODE
CREATE TABLE `nc_session` (
 `unique_id` int(5) unsigned NOT NULL auto_increment,
 `last_modification` datetime default '0000-00-00 00:00:00',
 `valid` enum('yes','no') NOT NULL default 'yes',
 `session_id` varchar(32) NOT NULL default '',
 `remote_addr` varchar(15) NOT NULL default '',
 `http_referer` varchar(100) NOT NULL default '',
 `session_data` text NOT NULL,
 PRIMARY KEY  (`unique_id`),
 KEY `session_key` (`session_id`),
 KEY `valid` (`valid`),
 KEY `valid_2` (`valid`)
) TYPE=MyISAM AUTO_INCREMENT=1;


Voici les fonctions :

CODE
function nc_session_open($path, $name)
    {
    return TRUE;
    }

function nc_session_close()
    {
    return TRUE;
    }

function nc_session_read($sess_id)
    {  
    $data = nc_requete_mysql("SELECT session_data FROM ".session_table." WHERE session_id = '".$sess_id."' and remote_addr ='".$_SERVER['REMOTE_ADDR']."' AND valid = 'yes'");
    if($data != TRUE)
 {
 return '';
 }
    if ($data['num_rows'] > 0)
 {
 return $data['result'][0]['session_data'];
 }
    else
 {
 return '';
 }
    }


function nc_session_write($sess_id, $sess_data)
    {
    $sess_data = mysql_escape_string($sess_data);
    $sess_id = mysql_escape_string($sess_id);
    $data = nc_requete_mysql("SELECT unique_id FROM ".session_table." WHERE session_id = '$sess_id' AND valid = 'yes' AND remote_addr ='".$_SERVER['REMOTE_ADDR']."'");
    if($data != TRUE)
 {
 return FALSE;
 }
    if (isset($data['num_rows']) && $data['num_rows'] > 0)
 {
 $data = nc_requete_mysql("UPDATE ".session_table." SET session_data = '$sess_data', last_modification = now() WHERE session_id = '$sess_id'");
 }
    else
 {
 if(isset($_SERVER['HTTP_REFERER']))
     {
     $http_referer = $_SERVER['HTTP_REFERER'];
     }
 else
     {
     $http_referer = 'no_referer';
     }
 $data = nc_requete_mysql("INSERT INTO ".session_table."  (last_modification, valid, session_id, session_data, remote_addr, http_referer) VALUES (now(),'yes', '$sess_id', '$sess_data', '".$_SERVER['REMOTE_ADDR']."', '".$http_referer."')");
 }
    return TRUE;
    }


function nc_session_destroy($sess_id)
    {
    $sess_id = mysql_escape_string($sess_id);
    $data = nc_requete_mysql("UPDATE ".session_table." SET valid = 'no' WHERE session_id = '$sess_id' and remote_addr ='".$_SERVER['REMOTE_ADDR']."'");
    if($data != TRUE)
 {
 return FALSE;
 }
    else
 {
 return TRUE;
 }
    }

function nc_session_gc($maxlifetime)
    {
    $data = nc_requete_mysql("UPDATE ".session_table." set valid='no' WHERE last_modification < DATE_ADD(now(), INTERVAL -$maxlifetime SECOND)");
    $data = nc_requete_mysql("OPTIMIZE TABLE ".session_table);
    if($data != TRUE)
 {
 return FALSE;
 }
    else
 {
 return TRUE;
 }
    }


il reste ensuite à mettre cette ligne avant l'appel à session_start :
CODE
session_set_save_handler ('nc_session_open', 'nc_session_close', 'nc_session_read', 'nc_session_write', 'nc_session_destroy', 'nc_session_gc');


Tu remarqueras que je fait aussi appel à une gestion personalisée des requetes mysql. je te met aussi le code ;-) :
CODE
function nc_requete_mysql($requete)
    {
    global $nombre_requete_mysql;
       debug('Requete SQL', $requete);
    $mysql_link=mysql_connect(mysql_server, mysql_login, mysql_pass);
    if(!$mysql_link)
 {
 trigger_error ('Connection base MySQL impossible', E_USER_ERROR);
 }
    $base_link = mysql_select_db(mysql_base, $mysql_link);
    if(!$base_link)
 {
 trigger_error ('Connection table MySQL impossible', E_USER_ERROR);
 }
    $result=mysql_query($requete, $mysql_link);
    if(!$result)
 {
 trigger_error ('Requete MySQL impossible', E_USER_ERROR);
 }
    else
 {
 if(ereg('SELECT', $requete))
     {
     $i = 0;
     while($line = mysql_fetch_assoc($result))
   {
   foreach($line as $name => $value)
       {
       $data['result'][$i][$name] = $value;
       }
   $i++;
   }
     $data['num_rows'] = mysql_num_rows($result);
     }
 $data['nb_affected_rows'] = mysql_affected_rows($mysql_link);
 $data['insert_id'] = mysql_insert_id ($mysql_link);
 }
    mysql_close($mysql_link);
    $nombre_requete_mysql++;
    if(isset($data))
 {
 return $data;
 }
    else
 {
 return FALSE;
 }
    }


Pour compter le nombre de membres conectés il suffit d'interroger la table sur le nombre de sessions valides. tu peux aussi decider de détruire les sessions au fur et à mesure au lieu de les invalider.
Cleden
Merci beaucoup, je vais tester tout ça wink.gif

Loïc;
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.