Io uso questo codice:
Codice PHP:
$host="localhost";
$database="nome_del_tuo_database";
$user="user_per_accedere_al_database";
$password="password_per_accedere_al_database";
$tabella="useronline";
$linkdata=@mysql_connect($host,$user,$password);//riga parametri di collegamento database
//ricavo il codice ip e l'orario
$codip=$_SERVER['REMOTE_ADDR'];//estraggo il codice ip del navigatore
$tempo=time();//ricavo il timestamp, numero che identifica l'orario del momento
//adesso verifico se il codice ip è nella tabella oppure no
$ric=@mysql_db_query($database,"select data from ".$tabella." where id='".$codip."' ",$linkdata);
$numric=@mysql_num_rows($ric);
if($numric!=0){//se l'ip è nella tabella aggiorno l'orario
@mysql_db_query($database,"update ".$tabella." set data=".$tempo." where id='".$codip."' ",$linkdata);
}
else{//se l'ip non è nella tabella lo inserisco
@mysql_db_query($database,"insert into ".$tabella."(id, data) values ('".$codip."','".$tempo."')",$linkdata);
//se in questo punto aumentiamo di 1 il numero di data dove id=1 (la prima riga della tabella) avremo anche un contatore di accessi del sito
}
//adesso elimino tutte le righe che eccedono nella differenza tempo
$difdata=$tempo-120;//120 sono secondi, in pratica elimino tutti gli ip che non si collegano ad una pagina da almeno due minuti
$ric2=@mysql_db_query($database,"select data from ".$tabella." where id!=1 ",$linkdata);
$veric2=@mysql_num_rows($ric2);
$numlinee=0;
while ($numlinee<$veric2){
$data=@mysql_result($ric2,$numlinee,"data");
if($data<$difdata){
@mysql_db_query($database," delete from ".$tabella." where data=".$data." ",$linkdata);
}
$numlinee++;
}
//tabella dove vedremo in numero dei navigatori online:
$fine=@mysql_db_query($database,"select * from ".$tabella." where id!=1 ",$linkdata);
$online=@mysql_num_rows($fine);
echo"<table><tr><td>Online : ".$online."</td></tr></table>";
//selezioniamo un numero casuale (per non stressare il database) che ottimizza la tabella, in alcune condizioni per ottimizzare la tabella occorre circa un secondo, pertanto cercate di ottimizzarla unatantum
$ran=rand(0,5);
if($ran==5){
@mysql_query("OPTIMIZE TABLE ".$tabella." ");
}
Con Mysql:
CREATE TABLE `useronline` (
`id` varchar(100) NOT NULL default '0',
`data` int(100) NOT NULL default '0',
PRIMARY KEY (`id`)
);
INSERT INTO `useronline` (`id`, `data`) VALUES (1, 0);
Fonte: http://www.allwebfree.it/articolo_ph...ine_script.php