io ho elaborato questo:
Codice PHP:
<?
// Matt's PHP script
$file="online.txt"; //file per database
$path="."; //senza la slash alla fine
$user=$_SERVER['PHP_AUTH_USER']; //specificare la variabile contenente l'user
$logintime="30"; //tempo per quanto l'utente rimane connesso (in secondi)
//do not edit
$fileonline=$path."/".$file;
setcookie('user', $user, time()+36000);
setcookie('time', time(), time()+36000);
foreach(file($fileonline) as $riga){
$p=explode("|",$riga);
$ip=$p['2'];
if($_SERVER['REMOTE_ADDR']==$ip){
$esegui="upgrade";
$timeon=$p['1'];
}
$line="";
$prec="";
}
if($esegui==''){
$prec=file_get_contents($path."/".$file);
fwrite(fopen($path."/".$file,"w+"), $prec."\n".$user."|".time()."|".$_SERVER['REMOTE_ADDR']);
}
if($esegui=='upgrade'){
$prec=file_get_contents($path."/".$file);
$newtime=time()+36000;
$new=str_replace($user."|".$timeon."|".$_SERVER['REMOTE_ADDR'], $user."|".$newtime."|".$_SERVER['REMOTE_ADDR'], $prec );
fwrite(fopen($path."/".$file,"w+"), $new);
}
$online="0";
$usonline="";
foreach(file($fileonline) as $riga){
$part=explode("|",$riga);
$tempo=($part['1']+$logintime);
if($_COOKIE['time'] > $tempo){
//cancellazione utente dalla lista
str_replace("\n".$part['0']."|".$part['1'], "",file_get_contents($path."/".$file));
}else{
$online=($online+1);
$usonline=$usonline.", ".$part['0'];
}
}
echo $usonline
?>
dovrebbe bloccare anche le doppie visualizzazioni cmq da solo non sono riuscito a provarlo piu di tanto..... XD
PS: per usarlo basta richiamare il file dello script con include("online.php");