Beste mensen,
Ik heb een klein PHP scriptje draaien (zie hieronder) dat weergeeft
hoeveel mensen er tegelijkertijd op de website zitten.
Het is simpel en zet de gegevens in een textfile.
Het werkt op zich prima, maar er zit in fout in die ik in de PHP code
niet kan vinden: als er een kijker in de laatste vijf of zes minuten
van een uur is geweest (bijv 16.57 uur, 13.54 uur) dan gaat die niet
uit de lijst weg, maar pas een uur later. Oftewel: zo'n websitebezoeker
blijft in de telling dus ongeveer een uur "hangen". Ik heb de
$min_online op 5 minuten gezet.
Ik heb geprobeerd de code te ontrafelen om de fout te zoeken, maar dat
gaan mijn petje te boven. Wie wil helpen?
De code staat hieronder.
Met vr.gr.,
Sievert.
<?php
function online_users()
{
$log_file = "online.txt";
$min_online = "5";
if ($HTTP_X_FORWARDED_FOR == "")
{
$ip = getenv(REMOTE_ADDR);
}
else
{
$ip = getenv(HTTP_X_FORWARDED_FOR);
}
$day = date("d");
$month = date("m");
$year = date("Y");
$date = "$day-$month-$year";
$ora = date("H");
$minuti = date("i");
$secondi= date("s");
$time = "$ora:$minuti:$secondi";
$users_read = fopen("$log_file", "r");
$users = fread($users_read, filesize("$log_file"));
fclose($users_read);
$to_write ="$ip|$time|$date";
if($users==0)
{
$user_write = fopen("$log_file", "w");
fputs($user_write , $to_write );
fclose($user_write );
}
else
{
$users=explode("\n",$users);
$user_da_tenere=array();
while (list ($key, $val) = each ($users))
{
$user_sing=explode("|",$val);
if($date==$user_sing[2])
{
$h=explode(":",$user_sing[1]);
if($ip!=$user_sing[0])
{
if(($h[0]==$ora)and(($minuti-$h[1])<=$min_online))
{
$user_da_tenere[]=$val;
}
if(($h[0]==($ora-1))and((($minuti+2)-$h[1])<=$min_online))
{
$user_da_tenere[]=$val;
}
}
}
}
$user_da_tenere[] = $to_write;
$user_write = fopen("$log_file", "w");
fputs($user_write , "" );
fclose($user_write );
while (list ($k, $v) = each ($user_da_tenere))
{
$new_file_log = fopen ("$log_file", "a");
fwrite($new_file_log,"$v\n");
fclose($new_file_log);
}
}
$users_online_read = fopen("$log_file", "r");
$users_online = fread($users_online_read,
filesize("$log_file"));
fclose($users_online_read);
$users_online = explode("\n",$users_online);
$n_u_online = count($users_online)-1;
return $n_u_online;
}
echo online_users(); // print het aantal bezoekers
?>

Likes:

Quote