| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
xperienss WRInaute occasionnel

Inscrit le: 01 Jan 2005 Messages: 225 Localisation: Genève - Suisse
|
Posté le : Ven Déc 15, 2006 8:58 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
Pour continuer dans les scripts en AJAX, après le script d'un formulaire de contact (http://www.webrankinfo.com/forums/viewtopic_64319.htm), je vous passe ici un script qui permet d'afficher la liste des personnes connectées (nom du membre ou visiteur, Ip Adress, localisation sur votre site et environnement client/Robot)
Un lien de test est tout en bas de mon post.
La table (qui existe déjà sur les forums IPB, sur PHPBB je ne sais pas mais il doit y avoir qqchose de similaire):
| Code: |
CREATE TABLE `sessions` (
`id` varchar(32) NOT NULL default '',
`member_name` varchar(64) default NULL,
`member_id` mediumint(8) NOT NULL default '0',
`ip_address` varchar(16) default NULL,
`browser` varchar(255) default NULL,
`running_time` int(10) default NULL,
`login_type` tinyint(1) default NULL,
`location` varchar(40) default NULL,
`member_group` smallint(3) default NULL,
`in_forum` smallint(5) NOT NULL default '0',
`in_topic` int(10) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `in_topic` (`in_topic`),
KEY `in_forum` (`in_forum`)
) TYPE=MyISAM;
|
En bas de vos pages, rajouter ce code :
| Code: |
$session_id = md5( uniqid(microtime()) );
$IPaddr = $_SERVER["REMOTE_ADDR"];
$user_agent = $_SERVER["HTTP_USER_AGENT"];
$time_now = time();
$resultat = mysql_query("select ip_address from sessions where ip_address = '$IPaddr'");
$ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
$ip_address = $ligne["ip_address"];
$id_membre = $_COOKIE["member_id"];
// SI C'EST UN MEMBRE ON RECUPERE L'ID DANS VOTRE BASE MEMBRE
if ($id_membre != 0){
$resultat2 = mysql_query("select id,name from members where id = '$id_membre'");
$ligne = mysql_fetch_array($resultat2, MYSQL_ASSOC);
$name_membre = $ligne["name"];
$id_membre2 = $ligne["id"];
}
// SI LA SESSION EST EXPIREE, ON VIRE DE LA BASE
$session_expiration = $session_expiration ? (time() - session_expiration) : (time() - 3600);
mysql_query("DELETE FROM sessions WHERE running_time < $session_expiration");
// SI l'IP EST DEJA LOGGEE, ON MET A JOUR
if ($ip_address == $IPaddr){
mysql_query("UPDATE sessions SET location='".$page_location."',running_time='".$time_now."',in_forum='0',in_topic='0',browser='".$user_agent."' WHERE ip_address='".$IPaddr."'");
// SI L'IP EST PAS LOGGEE, ON INSERT
}else{
mysql_query("INSERT INTO sessions (id, member_name, member_id, ip_address, browser, running_time, location, login_type, member_group,in_forum,in_topic) VALUES ('".$session_id."', '".$name_membre."', '".$id_membre2."', '".$IPaddr."', '".$user_agent."', '".$time_now."', '".$page_location."', '0', '','0','0')");
}
|
Sur la page whosonline.php (c'est la page ou l'on va voir la liste des connectés se recharger) :
| Code: |
<script type="text/javascript" language="JavaScript">
var xhr = null;
var n=0;
function getXhr(){
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else if(window.ActiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}else{
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
}
function init(){
loop();
}
function loop(){
// ICI ON SET LE LOOP : 5000 = 5 secondes
setTimeout('loop();',5000);
ShowPage();
}
function ShowPage(){
getXhr();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
// ON DEFINI LA DIV OU ON VA CHARGER
document.getElementById('chargementonline').innerHTML=xhr.responseText;
}
}
// ICI ON SET LA PAGE QU'ON VA LOADER EN AJAX EN GET
xhr.open("GET","whosonline2.php",true);
xhr.send(null);
}
</script>
<body onLoad="init()">
<h1>Who's Online</h1>
<div id="chargementonline"> <br><br><br><center>Chargement de la liste des connectés en cours</center><br><br><br><br><br><br><br> </div>
|
Le fichier whosonline2.php qui va recharger la liste des connectés et l'afficher via AJAX dans la div "chargementonline" de la page whosonline2.php :
| Code: |
<?
// ON INTERDIT LE CACHE POUR IE, SINON IL NE RECHARGE PAS
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé
include("./conf.php");
// POUR TRANSFORMER LA DATE TIMESTAMP AU BON FORMAT
function timestamp_to_date_mysql($timestamp){
return date("d/m/Y H:i", $timestamp);
}
?>
<center><table cellpadding="3" cellspacing="0">
<tr>
<td align="center" width="150">Connectés</td>
<td align="center" width="300">Lieu</td>
<td align="center" width="120">Heure</td>
<td align="center" width="190">Environnement</td>
</tr>
<?
// FONCTION POUR L'ENVIRONNEMENT OS/BROWSER
// Cette liste n'est peut être pas complétement à jour, mais il suffit de regarder qui est en ligne, et de rajouter la version du navigateur manquant ici...
$lvc_OS['Win98'] = 'Win98';
$lvc_OS['Win98'] = 'Win 9x';
$lvc_OS['Win98'] = 'Win9x';
$lvc_OS['WinNT'] = 'Win NT';
$lvc_OS['WinNT'] = 'WinNT4.0';
$lvc_OS['Win95'] = 'Win 95';
$lvc_OS['WinMe'] = 'Win Me';
$lvc_OS['WinXP'] = 'Win XP';
$lvc_OS['Win2000'] = 'Win 2000';
$lvc_OS['Linux'] = 'Linux';
$lvc_OS['Mac PPC'] = 'Mac PPC';
$lvc_OS['PPC Mac'] = 'PPC Mac';
$lvc_OS['SunOS'] = 'SunOS';
$lvc_agent['Internet Explorer'] = 'IE;';
$lvc_agent['Netscape'] = 'NS;';
$lvc_agent['Opera'] = 'OP;';
$lvc_agent['Firefox'] = 'Firefox';
$lvc_agent['Firebird'] = 'Firebird';
$lvc_agent['AppleWebKit'] = 'AppleWebKit';
$lvc_agent['Safari'] = 'Safari';
$lvc_agent['Konqueror'] = 'Konqueror';
$lvc_agent['Mozilla'] = 'Mozilla';
$lvc_other_agt['Lynx'] = 'Lynx - Linux';
$lvc_other_agt['WWWOFFLE'] = 'WWWOFFLE - Linux';
$lvc_other_agt['Konqueror'] = 'Konqueror - Linux';
$lvc_agent_versions['IE'] = Array(
'7.0',
'6.0',
'5.5',
'5.5b2',
'5.5b3',
'5.23',
'5.22',
'5.21',
'5.17',
'5.16',
'5.14',
'5.13',
'5.01',
'5.0',
'5.0b1',
'5.0b2',
'4.5',
'4.01',
'4.0',
'3.02',
'3.01'
);
$lvc_agent_versions['NS'] = Array(
'4.8',
'4.76',
'4.75',
'4.74',
'4.73',
'4.72',
'4.71',
'4.7',
'4.61',
'4.6',
'4.51',
'4.5',
'4.08',
'4.07',
'4.06',
'4.05',
'4.04',
'4.03'
);
$lvc_agent_versions['NS6'] = Array(
'8.0.1',
'7.2',
'7.1',
'7.02',
'7.01',
'7.0',
'7.1',
'6.2.3',
'6.2.2',
'6.2',
'6.1',
'6.0',
'6.1',
'm14',
'm17',
'm18'
);
$lvc_agent_versions['Firefox'] = Array(
'2.0',
'2.0b1',
'2.0b2',
'1.5.0.9',
'1.5.0.8',
'1.5.0.7',
'1.5.0.6',
'1.5.0.5',
'1.5.0.4',
'1.5.0.3',
'1.5.0.2',
'1.5.0.1',
'1.5',
'1.0.7',
'1.0.6',
'1.0.5',
'1.0.4',
'1.0.3',
'1.0.2',
'1.0.1',
'1.0',
'0.9.6',
'0.9.3',
'0.9.2',
'0.9.1',
'0.8',
'1.7.8',
'1.7.7',
'1.7.5',
'1.7.3',
'1.7.2',
'1.6',
);
$lvc_agent_versions['Firebird'] = Array(
'0.7',
);
$lvc_agent_versions['Konqueror'] = Array(
'3.2',
);
$lvc_agent_versions['Mozilla'] = Array(
'1.7.10',
'rv:1.7.10',
'rv:1.7.8',
'1.7.8',
'1.7.3',
'1.7',
'1.4',
);
$lvc_agent_versions['AppleWebKit'] = Array(
'1.7.5',
'1.7.3',
'1.6',
'1.0.2',
);
$lvc_agent_versions['Safari'] = Array(
'419.3',
'417.9.3',
'417.9.2',
'85.5',
'85.6',
'85.8',
'85.8.1',
'417.8',
'416.12',
'412',
'312',
'125.12',
'125.1',
'125.9',
'125.8',
);
$lvc_agent_versions['Camino'] = Array(
'0.8.4',
'0.8.3',
'0.8.2',
'0.8.1',
'0.8int',
);
$lvc_agent_versions['OP'] = Array(
'9.00',
'8.5',
'8.0',
'7.53',
'7.5',
'7.0',
'5.12',
'5.11',
'5.0',
'4.0',
'3.60',
'3.62'
);
$lvc_agent_os['IE'] = Array(
'Windows 95' => 'Win95',
'Win32' => 'Win95',
'Win 9x 4.90' => 'WinMe',
'Windows 98' => 'Win98',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'Mac PowerPC' => 'Mac PPC',
'Mac PPC' => 'Mac PPC',
'SunOS' => 'SunOS',
);
$lvc_agent_os['NS'] = Array(
'Win95' => 'Win95',
'Win 9x 4.90' => 'WinMe',
'Win98' => 'Win98',
'WinNT' => 'WinNT',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'Linux' => 'Linux',
'SunOS' => 'SunOS',
'PPC' => 'Mac PPC',
'FreeBSD' => 'FreeBSD',
'AIX' => 'AIX',
'IRIX' => 'IRIX',
'HP-UX' => 'HP-UX',
'OS/2' => 'OS/2',
'NetBSD' => 'NetBSD'
);
$lvc_agent_os['NS6'] = Array(
'Win95' => 'Win95',
'Win 9x 4.90' => 'WinMe',
'Win98' => 'Win98',
'WinNT' => 'WinNT',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'Linux' => 'Linux',
'SunOS' => 'SunOS',
'PPC' => 'Mac PPC',
'FreeBSD' => 'FreeBSD',
'AIX' => 'AIX',
'IRIX' => 'IRIX',
'HP-UX' => 'HP-UX',
'OS/2' => 'OS/2',
'NetBSD' => 'NetBSD'
);
$lvc_agent_os['OP'] = Array(
'Windows 95' => 'Win95',
'Windows 98' => 'Win98',
'Windows 2000' => 'Win2000',
'Win 9x 4.90' => 'WinMe',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'Linux' => 'Linux'
);
$lvc_agent_os['Firefox'] = Array(
'Windows 95' => 'Win95',
'Windows 98' => 'Win98',
'Win98' => 'Win98',
'Windows 2000' => 'Win2000',
'Win 9x 4.90' => 'WinMe',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'WinNT4.0' => 'WinNT',
'Linux' => 'Linux',
'Mac OS X' => 'Mac OS X',
'FreeBSD' => 'FreeBSD',
'SunOS' => 'SunOS',
);
$lvc_agent_os['Mozilla'] = Array(
'Windows 95' => 'Win95',
'Windows 98' => 'Win98',
'Win98' => 'Win98',
'Windows 2000' => 'Win2000',
'Win 9x 4.90' => 'WinMe',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'Linux' => 'Linux',
'Mac OS X' => 'Mac OS X',
'FreeBSD' => 'FreeBSD',
'SunOS' => 'SunOS',
);
$lvc_agent_os['Firebird'] = Array(
'Windows 95' => 'Win95',
'Windows 98' => 'Win98',
'Windows 2000' => 'Win2000',
'Win 9x 4.90' => 'WinMe',
'Windows NT 5.0' => 'Win2000',
'Windows NT 5.1' => 'WinXP',
'Windows NT' => 'WinNT',
'Linux' => 'Linux',
'Mac OS X' => 'Mac OS X',
'SunOS' => 'SunOS',
);
$lvc_agent_os['Safari'] = Array(
'Mac OS X' => 'Mac OS X',
);
$lvc_agent_os['Konqueror'] = Array(
'Linux' => 'Linux',
);
$lvc_agent_os['Camino'] = Array(
'Mac OS X' => 'Mac OS X',
'PPC Mac OS X Mach-O' => 'Mac OS X',
);
//Mozilla/5.0 (compatible; Konqueror/3.2; Linux) KHTML/3.2.3 (like Gecko)
//Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)
//Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7
//Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax)
//Mozilla/4.0 (compatible; grub-client-2.6.0)
//Mozilla/5.0 (Windows; U; Win98; fr-FR; rv:1.7.10)
//psbot/0.1 ( http://www.picsearch.com/bot.html)
//InsurancoBot( http://www.insuranco.de/bot.html)
// ------------------------------------------------------------------------- //
function analyse_agent($agt){
$lvc_agent_max_length = "300";
global $lvc_agent_max_length;
global $lvc_agent_versions;
global $lvc_agent_versions_2;
global $lvc_agent_os;
global $lvc_other_agt;
$agt = strtr($agt, '+', ' ');
if (ereg('MSIE', $agt) && !ereg('Opera', $agt)){ // Internet Explorer
$new_agt = 'IE';
$agt = strtr($agt, '_', ' ');
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['IE']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['IE'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['IE'][$cnt];
for (@reset($lvc_agent_os['IE']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['IE'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}elseif (ereg('Opera', $agt)){ // Opera
$new_agt = 'OP';
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['OP']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['OP'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['OP'][$cnt];
for (@reset($lvc_agent_os['OP']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['OP'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}elseif (ereg('Mozilla/4.', $agt)){ // Netscape 4.x
$new_agt = 'NS';
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['NS']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['NS'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['NS'][$cnt];
for (@reset($lvc_agent_os['NS']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['NS'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}elseif (ereg('Safari', $agt)){ // Safari
$new_agt = 'Safari';
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['Safari']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['Safari'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['Safari'][$cnt];
for (@reset($lvc_agent_os['Safari']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['Safari'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}elseif (ereg('Firefox', $agt)){ // Firefox
$new_agt = 'Firefox';
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['Firefox']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['Firefox'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['Firefox'][$cnt];
for (@reset($lvc_agent_os['Firefox']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['Firefox'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}elseif (ereg('Netscape', $agt) && !ereg('Konqueror', $agt)){ // NS 6
$new_agt = 'NS';
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['NS6']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['NS6'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['NS6'][$cnt];
for (@reset($lvc_agent_os['NS']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['NS'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}elseif (ereg('Gecko', $agt)){ // MOZILLA
$new_agt = 'Mozilla';
for ($cnt = 0, $ok = false;
$cnt < sizeof($lvc_agent_versions['Mozilla']) && !$ok;
$cnt++){
if ($ok = ereg($lvc_agent_versions['Mozilla'][$cnt], $agt)){
$new_agt .= ';'.$lvc_agent_versions['Mozilla'][$cnt];
for (@reset($lvc_agent_os['Mozilla']), $ok = false;
(list($key, $value) = @each($lvc_agent_os['Mozilla'])) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt .= ';'.$value;
}
}
}
if (!$ok) $new_agt = $agt;
}
else // others
{
$new_agt = $agt;
for (@reset($lvc_other_agt), $ok = false;
(list($key, $value) = @each($lvc_other_agt)) && !$ok;){
if ($ok = ereg($key, $agt))
$new_agt = $value;
}
}
$new_agt = strip_tags($new_agt);
if (strlen($new_agt) > 200)
$new_agt = substr($new_agt, 0, $lvc_agent_max_length-4).' ...';
return($new_agt);
}
$a = 0;
// ON RECUPERE DANS LA BASE LES 30 DERNIERS CONNECTES
$resultat = mysql_query("SELECT * FROM sessions ORDER BY running_time DESC LIMIT 0,30");
while($ligne = mysql_fetch_array($resultat)){
//DATE
$running_time = timestamp_to_date_mysql($ligne["running_time"]);
//MEMBRE OU VISITEUR
$member_name = $ligne["member_name"];
$member_name = strtolower($member_name);
$member_name = ucfirst($member_name);
$member_id = $ligne["member_id"];
//IP
$ip_address = $ligne["ip_address"];
//LOCATION
$location = $ligne["location"];
$in_forum = $ligne["in_forum"];
$in_topic = $ligne["in_topic"];
// NAVIGATEUR + OS OU ROBOT
$browser = $ligne["browser"];
$browser = analyse_agent($browser);
// ATTENTION CETTE LISTE N'EST SUREMENT PAS A JOUR
// Idem que pour la lite des navigateur, il suffit de regarder la liste de connectés pour mettre a jour la liste de ROBOTS
switch($browser){
case "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)": $browser="<font class=\"blue\">Robot Google 2.1</font>"; break;
case "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)": $browser="<font class=\"blue\">Robot Google 2.1</font>"; break;
case "Googlebot/2.1 (+http://www.google.com/bot.html)": $browser="<font class=\"blue\">Robot Google 2.1</font>"; break;
case "Googlebot/2.1 ( http://www.google.com/bot.html)": $browser="<font class=\"blue\">Robot Google 2.1</font>"; break;
case "Googlebot/2.1 (http://www.google.com/bot.html)": $browser="<font class=\"blue\">Robot Google 2.1</font>"; break;
case "Mediapartners-Google/2.1": $browser="<font class=\"blue\">Mediapartners</font>"; break;
case strpos($browser,"Teoma"): $browser="<font class=\"blue\">Teoma Robot</font>"; break;
case "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; http://sp.ask.com/docs/about/tech_crawling.html)": $browser="<font class=\"blue\">Teoma Robot</font>"; break;
case "Mozilla/4.0 compatible ZyBorg/1.0 (wn-12.zyborg@looksmart.net; http://www.WISEnutbot.com)": $browser="<font class=\"blue\">Robot Looksmart v1.0</font>"; break;
case "Mozilla/4.0 compatible ZyBorg/1.0 (wn-14.zyborg@looksmart.net; http://www.WISEnutbot.com)": $browser="<font class=\"blue\">Robot Looksmart v1.0</font>"; break;
case "Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.dlc@looksmart.net; http://www.WISEnutbot.com)": $browser="<font class=\"blue\">Robot Looksmart v1.0</font>"; break;
case "Mozilla/4.0 (compatible; grub-client-2.6.1)": $browser="<font class=\"blue\">Robot Looksmart</font>"; break;
case "Mozilla/4.0 (compatible; grub-client-2.6.0)": $browser="<font class=\"blue\">Robot Looksmart</font>"; break;
case "Mozilla/4.0 (compatible; Cerberian Drtrs Version-3.2-Build-0)": $browser="<font class=\"blue\">Robot Cerberian</font>"; break;
case "Mozilla/5.0 (compatible; BecomeBot/2.0.3; http://www.become.com/webmasters.html)": $browser="<font class=\"blue\">Become Robot 2.0.3</font>"; break;
case "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)": $browser="<font class=\"blue\">Robot Yahoo</font>"; break;
case "Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)": $browser="<font class=\"blue\">Robot Yahoo China</font>"; break;
case "Mozilla/5.0 (compatible; BecomeBot/3.0; MSIE 6.0 compatible; http://www.become.com/site owners.html)": $browser="<font class=\"blue\">BecomeBot 3.0</font>"; break;
case "TurnitinBot/2.0 http://www.turnitin.com/robot/crawlerinfo.html": $browser="<font class=\"blue\">Robot Turnitin 2.0</font>"; break;
case "ia_archiver": $browser="<font class=\"blue\">Alexa Robot (ia_archiver)</font>"; break;
case "appie 1.1 (www.walhello.com)": $browser="<font class=\"blue\">Robot Walhello </font>"; break;
case "ConveraCrawler/0.4": $browser="<font class=\"blue\">Robot Convera 0.4</font>"; break;
case "ConveraCrawler/0.8 ( http://www.authoritativeweb.com/crawl)": $browser="<font class=\"blue\">Robot Convera 0.8</font>"; break;
case "ConveraCrawler/0.9d ( http://www.authoritativeweb.com/crawl)": $browser="<font class=\"blue\">Robot Convera 0.9</font>"; break;
case "Iltrovatore-Setaccio/1.2 (It-bot; http://www.iltrovatore.it/bot.html; info@iltrovatore.it)": $browser="<font class=\"blue\">Iltrovatore Robot Italien</font>"; break;
case "Seekbot/1.0 (http://www.seekbot.net/bot.html) HTTPFetcher/0.3": $browser="<font class=\"blue\">SEEKBOT Robot 3.0</font>"; break;
case "NutchCVS/0.06-dev (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net)": $browser="<font class=\"blue\">Robot Looksmart</font>"; break;
case "NutchCVS/0.05 (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net)": $browser="<font class=\"blue\">Robot Looksmart</font>"; break;
case "sherlock/1.0": $browser="<font class=\"blue\">Robot Sherlock v1.0</font>"; break;
case "Wotbox/0.7-alpha (bot@wotbox.com; http://www.wotbox.com)": $browser="<font class=\"blue\">Robot Wotbox/0.7-alpha</font>"; break;
case "http://www.almaden.ibm.com/cs/crawler [bc23]": $browser="<font class=\"blue\">Robot Almaden bc23</font>"; break;
case "IRLbot/1.0 ( http://irl.cs.tamu.edu/crawler)": $browser="<font class=\"blue\">Robot IRLbot v1.0</font>"; break;
case "msnbot/0.3 (+http://search.msn.com/msnbot.htm)": $browser="<font class=\"blue\">Robot MSN 0.3</font>"; break;
case "msnbot/0.9 ( http://search.msn.com/msnbot.htm)": $browser="<font class=\"blue\">Robot MSN 0.9</font>"; break;
case "msnbot/1.0 (+http://search.msn.com/msnbot.htm)": $browser="<font class=\"blue\">Robot MSN 1.0</font>"; break;
case "msnbot/1.0 ( http://search.msn.com/msnbot.htm)": $browser="<font class=\"blue\">Robot MSN 1.0</font>"; break;
case "aipbot/1.0 (aipbot; http://www.aipbot.com; aipbot@aipbot.com)": $browser="<font class=\"blue\">Aipbot</font>"; break;
case "Gigabot/2.0": $browser="<font class=\"blue\">Robot Gigabot</font>"; break;
case "psbot/0.1 ( http://www.picsearch.com/bot.html)": $browser="<font class=\"blue\">Robot Picsearch</font>"; break;
case "InsurancoBot( http://www.insuranco.de/bot.html)": $browser="<font class=\"blue\">InsurancoBot</font>"; break;
case "IP*Works! V5 HTTP/S Component - by /n software - www.nsoftware.com": $browser="<font class=\"red\">IP protégée</font>"; break;
case "FAST MetaWeb Crawler (helpdesk at fastsearch dot com)": $browser="<font class=\"blue\">FastSearch Bot</font>"; break;
case "e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)": $browser="<font class=\"blue\">e-SocietyRobot</font>"; break;
case "Baiduspider (http://www.baidu.com/search/spider.htm)": $browser="<font class=\"blue\">Baiduspider</font>"; break;
case "Baiduspider ( http://www.baidu.com/search/spider.htm)": $browser="<font class=\"blue\">Baiduspider</font>"; break;
case "Gigabot/2.0/gigablast.com/spider.html": $browser="<font class=\"blue\">Gigabot</font>"; break;
case "BIGLOTRON (Beta 2;GNU/Linux)": $browser="<font class=\"blue\">Robot Biglotron</font>"; break;
case "SBIder/0.8-dev (SBIder; http://www.sitesell.com/sbider.html; http://support.sitesell.com/contact-support.html)": $browser="<font class=\"blue\">Robot SBIder 0.8</font>"; break;
}
// ON AFFICHE LES RESULTATS EN 2 LIGNES DE COULEURS DIFFERENTES
// A VOUS DE DEFINIR DANS VOTRE CSS : la class "row1" et ""row2"
if($a % 2 ==0){
echo "<tr>
<td class=\"row1\" align=\"left\" width=\"150\">";
if ($member_name == ""){
echo "Visiteur";
}else{ // ON AFFICHE LE NOM DU MEMBRE AVEC UN LIEN VERS SA FICHE
echo "<a href=\"".$url."forum/index.php?showuser=".$member_id."\"><strong>".$member_name."</strong></a>";
}
echo " (".$ip_address.")</td>
<td class=\"row1\" align=\"left\" width=\"300\">".$location."</td>
<td class=\"row1\" align=\"center\" width=\"120\">".$running_time."</td>
<td class=\"row1\" align=\"center\" width=\"190\">".$browser."</td>
</tr>
<tr><td colspan=\"5\" height=\"2\"><img src=\"blank.gif\" height=\"2\"></td></tr>";
}else{
echo "<tr>
<td class=\"row2\" align=\"left\" width=\"150\">";
if ($member_name == ""){
echo "Visiteur";
}else{
echo "<a href=\"".$url."forum/index.php?showuser=".$member_id."\"><strong>".$member_name."</strong></a>";
}
echo " (".$ip_address.")</td>
<td class=\"row2\" align=\"left\" width=\"300\">".$location."</td>
<td class=\"row2\" align=\"center\" width=\"120\">".$running_time."</td>
<td class=\"row2\" align=\"center\" width=\"190\">".$browser."</td>
</tr>
<tr><td colspan=\"5\" height=\"2\"><img src=\"blank.gif\" height=\"2\"></td></tr>";
}
$a++;
}
?>
</table></center>
|
Voilà...
Le principe est de recharger via AJAX une liste de connectés toutes les X secondes sans pour autant recharger toute la charte qui va autour.
On peut aussi adapté cela à pleins d'autres cas (affichage dynamique live du nombre de connectés, ...)
Ce script est a adapté suivant votre site / forum / structure de votre base...
Je ne dis pas que mon code est parfait, d'ailleurs j'attends vos commentaires...
Cela m'a pris pas mal de temps pour extraire ce bout de code de mon site auquel il est intégré, alors il se peut que j'ai fait quelques erreurs.
Pour exemple : -http://www.compta-online.com/test-WRI.html
Pour pas faire ramer mon site, j'ai limité l'affichage a 8 connectés, rechargement toutes les 10 secondes, et j'ai bien entendu caché les IPs.
Ne restez pas tous 3 heures sur cette page sinon ca va faire planter mon site
Xp |
|
| |
|
 |
dorian53 WRInaute accro

Inscrit le: 10 Avr 2005 Messages: 1411
|
Posté le : Ven Déc 15, 2006 10:20 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
J'ai bien sûr pas pris le temps d'examiner le tout mais ça me semble affreusement lourd !
Pourquoi ne pas travailler directement avec les fichiers sessions ?
Y mettre les infos du visiteurs la première fois, les comptes, afficher son contenu et voila ? |
|
| |
|
 |
xperienss WRInaute occasionnel

Inscrit le: 01 Jan 2005 Messages: 225 Localisation: Genève - Suisse
|
Posté le : Ven Déc 15, 2006 10:28 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
| dorian53 a écrit: |
J'ai bien sûr pas pris le temps d'examiner le tout mais ça me semble affreusement lourd !
Pourquoi ne pas travailler directement avec les fichiers sessions ?
Y mettre les infos du visiteurs la première fois, les comptes, afficher son contenu et voila ? |
Oui c'est très lourd car j'ai extrait cela de mon forum qui fait déjà tout cela par défaut (insertion dans la base des connectés) et le script à nu peut faire peur.
Maintenant à vous d'adapter suivant vos besoins, la charge de votre serveur, votre site...
Pour mon site, je suis le seul a afficher la page des connectés donc pas de probleme pour faire ramer mon dédié.
Si vous voulez faire évoluer ce script, et proposer une autre version, je suis preneur et je pense que je ne suis pas le seul.
J'espère que certains investiront un peu de leur temps comme je l'ai fait pour poster ce sujet qui m'a pris 1 heure pour extraire le code et mettre en forme le message.
Xp
[edit] Il est possible pour alléger le code de virer tout le processus de l'affichage de l'environnement du visiteur, car c'est le plus lourd à gérer.[/edit] |
|
| |
|
 |
xgamer WRInaute occasionnel

Inscrit le: 29 Nov 2006 Messages: 163 Localisation: cevennes
|
Posté le : Ven Déc 15, 2006 12:26 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
merci j'ai trouvé ton script trés intéressant !
je vais tenter de l'adapter dans les prochains jours . |
|
| |
|
 |
Mitirapa WRInaute accro

Inscrit le: 10 Juil 2002 Messages: 1614 Localisation: Brest
|
Posté le : Ven Déc 15, 2006 14:33 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
| ca serait plutot whosonline2.php dans ce cas qui devrait mettre à jour la liste des connectés plutot quand bas de nos pages nan ? car sinon ya pas trop d'interet de faire une liste des connectés en ajax... |
|
| |
|
 |
xperienss WRInaute occasionnel

Inscrit le: 01 Jan 2005 Messages: 225 Localisation: Genève - Suisse
|
Posté le : Ven Déc 15, 2006 14:48 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
| Mitirapa a écrit: |
| ca serait plutot whosonline2.php dans ce cas qui devrait mettre à jour la liste des connectés plutot quand bas de nos pages nan ? car sinon ya pas trop d'interet de faire une liste des connectés en ajax... |
hum... non
le script en bas de page (chaque page de votre site) permet d'insérer dans la base les personnes qui naviguent sont votre site.
Un peu comme un tag Xiti ou de n'importe quels stats présents sur la majorité des sites.
Après tu as "whosonline.php" qui te permet d'afficher la liste des personnes connectées (avec un script en AJAX qui charge la liste en GET du fichier "whosonline2.php").
Pour ma part "whosonline.php" est uniquement accessible à l'administrateur et aux modérateurs de mon site.
Cela nous permet de savoir à la seconde prêt, ce que font nos membres et visiteurs sont notre site.
C'est très utile pour modérer et pour moi qui développe le site, cela me permet de regarder les comportements de navigation.
Xp |
|
| |
|
 |
Mitirapa WRInaute accro

Inscrit le: 10 Juil 2002 Messages: 1614 Localisation: Brest
|
Posté le : Ven Déc 15, 2006 15:00 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
oué ok dans ce cas
moi j'voyais ca en fait dans l'utilisation d'un messenger sur son site, j'ai fait ca sur le mien pour les membres, et bcp de membres restent glander sur le site, et la session peut donc expirer, donc si yen a qui veulent utiliser dans ce sens, je pense qu'il faudra mieux integrer dans whosonline2.php les requetes sur la table session |
|
| |
|
 |
kazhar WRInaute accro

Inscrit le: 09 Jan 2004 Messages: 5972 Localisation: Somewhere only I know
|
Posté le : Ven Déc 15, 2006 15:31 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
Une autre remarque quant à la lourdeur.
En utilisant un framework, comme scriptaculous par exemple, tu pourrais diminuer ta quantité de code par 10 au moins. |
|
| |
|
 |
xperienss WRInaute occasionnel

Inscrit le: 01 Jan 2005 Messages: 225 Localisation: Genève - Suisse
|
Posté le : Ven Déc 15, 2006 15:55 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
| Code: |
<script type="text/javascript" language="JavaScript">
var xhr = null;
var n=0;
function getXhr(){
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else if(window.ActiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}else{
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
}
function init(){
loop();
}
function loop(){
// ICI ON SET LE LOOP : 5000 = 5 secondes
setTimeout('loop();',5000);
ShowPage();
}
function ShowPage(){
getXhr();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
// ON DEFINI LA DIV OU ON VA CHARGER
document.getElementById('chargementonline').innerHTML=xhr.responseText;
}
}
// ICI ON SET LA PAGE QU'ON VA LOADER EN AJAX EN GET
xhr.open("GET","whosonline2.php",true);
xhr.send(null);
}
</script>
<body onLoad="init()">
<h1>Who's Online</h1>
<div id="chargementonline"> <br><br><br><center>Chargement de la liste des connectés en cours</center><br><br><br><br><br><br><br> </div> |
Le code AJAX ce n'est ni plus ni moins que celui ci dessus.
Cela permet de recharger (loop) une page en AJAX.
Le reste du code est une fonction interminable en PHP (sur whosonline2.php) qui permet d'afficher l'environement du navigateur (Navigateur + Version + OS / ou Robot).
Si tu enleves cette fonction et donc cette fonctinnalité, tu reduis le code par 60 %... (j'aurais du l'enlever dans mon exemple car cela vous destabilise apparement).
scriptaculous... c'est bien mais les fichiers js externe sont énormes...
J'tilise également ce type de code pour un chat online en AJAX.
Xp |
|
| |
|
 |
RomsIW WRInaute accro

Inscrit le: 25 Mai 2004 Messages: 1038 Localisation: Paris
|
Posté le : Ven Déc 15, 2006 16:49 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
plus simple, plus court, et tout aussi efficace (ce n'est pas moi qui l'ai fait) :
| Code: |
<?php
// Compteur instantané (compteur live ou live counter):
// ==================================
// Ce script met à jour le fichier /compteur-live/compteur-live.txt, dans lequel sont
// identifiés les visiteurs connectés sur le site.
// Il est appelé dans l'entête de toutes les pages du site.
// -----------------------------------------------------------------------------------
// Le fichier /compteur-live/compteur-live.txt contient 2 lignes par visiteur connecté:
// - une ligne contenant son heure de connexion,
// - suivie d'une ligne contenant son adresse IP.
// Les visiteurs y sont classés par ordre chronologique:
// - de celui qui s'est connecté il y a le plus longtemps (en haut de fichier),
// - à celui qui s'est connecté le plus récemment (en bas de fichier).
// -----------------------------------------------------------------------------------
// On lit chaque ligne du fichier /compteur-live/compteur-live.txt
// dans le tableau $compteur_live
$compteur_live = file("compteur-live/compteur-live.txt");
// -----------------------------------------------------------------------------------
// On détermine quels sont les visiteurs à éliminer
// (ceux dont la dernière connexion date de plus de 5 minutes).
$premiere_ligne_a_garder=-2; // valeur virtuelle. Sera 0 au 1er passage dans la boucle...
do { // On boucle jusqu'à trouver le premier visiteur à ne pas eliminer, ou la fin de fichier.
$premiere_ligne_a_garder=$premiere_ligne_a_garder+2; // visiteur suivant
} while((date('U', strtotime('-300 seconds')) > $compteur_live[$premiere_ligne_a_garder]) && ($premiere_ligne_a_garder < count($compteur_live)));
// 300 secondes = 5 minutes. Cette durée est modifiable.
// -----------------------------------------------------------------------------------
// On lit l'adresse IP du visiteur qui est en train de charger une page
if(isset($_SERVER["REMOTE_ADDR"])) { // Si on peut déterminer l'adresse IP
$ip_en_cours = $_SERVER["REMOTE_ADDR"];
}
else { // sinon
$ip_en_cours = "Non identifiable";
}
// -----------------------------------------------------------------------------------
// on reconstitue le futur contenu du fichier dans la variable $compteur
$compteur = "";
if($premiere_ligne_a_garder < count($compteur_live)) { // des visiteurs à ne pas éliminer?
// Pour tous les visiteurs inscrits dans le fichier à ne pas éliminer...
for($i=$premiere_ligne_a_garder; $i<count($compteur_live); $i=$i+2) {
// Garder ce visiteur, sauf si c'est celui qui est en train de recharger
// une page (ceci afin déviter les doublons).
if(trim($compteur_live[$i+1]) != $ip_en_cours) {
$compteur .= trim($compteur_live[$i])."\n".trim($compteur_live[$i+1])."\n";
}
}
}
// -----------------------------------------------------------------------------------
// Enfin on ajoute le visiteur qui est en train de se connecter
$compteur .= date('U')."\n".$ip_en_cours;
// -----------------------------------------------------------------------------------
// Et on écrit le tout dans le fichier
$pointeur=fopen("compteur-live/compteur-live.txt","w");
fputs($pointeur,$compteur);
fclose($pointeur);
?> |
et vous récupérez le résultats ainsi :
| Code: |
<?php
// Affichage du compteur instantané (compteur live ou live counter):
// ==========================================
// On lit les lignes du fichier /compteur-live/compteur-live.txt
// dans le tableau $compteur_live.
// Ce fichier contient 2 lignes par visiteur connecté. Le nombre de visiteurs connecté
// est donc la moitié du nombre de lignes du fichier.
$compteur_live = file("compteur-live/compteur-live.txt");
echo (count($compteur_live)/2)." ";
if((count($compteur_live)/2) > 1) {
echo "visiteurs connectés";
}
else {
echo "visiteur connecté";
}
?> |
résultat sur mon www en bas à droite de la page |
|
| |
|
 |
xperienss WRInaute occasionnel

Inscrit le: 01 Jan 2005 Messages: 225 Localisation: Genève - Suisse
|
Posté le : Ven Déc 15, 2006 16:58 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
Attends je crois qu'il y a confusion.
mon script n'affiche pas le nombre de connectés !
Enfin bien sur il peut le faire, mais ce n'est pas le but.
Il affiche les noms de membres ou visiteurs, leur IP, la page ou ils se trouvent, leur navigateur/OS, tout cela en AJAX, c'est à dire que la page se recharge sans click ou F5, il suffit de regarder son ecran...
Ce script sert surtout pour l'administration d'un site.
Xp
[edit] Cela te permet aussi de passer tes soirées tranquille devant ton écran à regarder GGbot crawler ton site de page en page [/edit] |
|
| |
|
 |
RomsIW WRInaute accro

Inscrit le: 25 Mai 2004 Messages: 1038 Localisation: Paris
|
Posté le : Sam Déc 16, 2006 1:57 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
ah non ya pas de confusion, je montrais juste qu'un script, certes sans ajax, peut le faire de façon très courte. là où je récupère l'IP tu peux mettre tout ce que tu veux comme récupération de données sur l'utilisateur... après, tu peux faire rafraichir toutes les X secondes le contenu du div id=connectes avec le contenu du fichier txt.. enfin bref c'est une autre façon d'aborder la chose.
| Citation: |
| [edit] Cela te permet aussi de passer tes soirées tranquille devant ton écran à regarder GGbot crawler ton site de page en page Very Happy [/edit] |
ça ça tue  |
|
| |
|
 |
sun location Nouveau WRInaute
Inscrit le: 14 Déc 2006 Messages: 47 Localisation: En location
|
Posté le : Sam Déc 16, 2006 7:32 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
| Ce source est exelent, merci xperienss |
|
| |
|
 |
OJAL WRInaute passionné

Inscrit le: 10 Avr 2003 Messages: 759 Localisation: LYON (69)
|
Posté le : Sam Déc 16, 2006 18:24 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
Allez, je vais faire le candide lol
Pourquoi de l'AJAX pour faire celà??? Plutôt qu'un simple rechargement de page??? |
|
| |
|
 |
xperienss WRInaute occasionnel

Inscrit le: 01 Jan 2005 Messages: 225 Localisation: Genève - Suisse
|
Posté le : Sam Déc 16, 2006 19:58 Sujet du message: [AJAX] Script des personnes connectées sur votre site |
|
|
Bien c'est simple.
Le fichier whosonline.php tu l'intègre dans ta charte... avec ton header, ton footer, ton menu de gauche, menu de droite... et cela te permet de recharger uniquement le centre de la page sans reloader toute la page.
Puis ca fait plus pro pour l'internaute car c'est complétement transparent à l'écran.
Allez si mon script vous a plu, une petite RECO en haut à gauche.
Xp |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
Définitions :
|
|