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
?>
Evenementen voor de komende 60 Dag(en)
Resultaten 1 tot 4 van de 4
Onderwerp: foutje in PHP script
-
foutje in PHP script
-
Re: foutje in PHP script
Sievert wrote:
> 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.
>
Op zich een aardig idee, al zou ik eerder stellen dat het aantal bezoekers
in de afgelopen 5 minuten weergegeven wordt. Het probleem zit in het
berekenen van het tijdsverschil. Ik heb het script iets aangepast met een
functie die ik op internet vond, volgens mij zou het zo correct moeten werken.
zie ook: http://www.gidnetwork.com/b-16.html
<?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);
}
$date = date("Y-m-d H:i:s");
$users_read = fopen("$log_file", "r");
$users = fread($users_read, filesize("$log_file")+1);
fclose($users_read);
$to_write ="$ip|$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($ip!=$user_sing[0])
{
$diff = get_time_difference($user_sing[1], $date);
if($diff['days']==0 && $diff['hours']==0 &&
$diff['minutes']<$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
/**
* Function to calculate date or time difference.
*
* Function to calculate date or time difference. Returns an array or
* false on error.
*
* @author J de Silva <giddomains@gmail.com>
* @copyright Copyright © 2005, J de Silva
* @link http://www.gidnetwork.com/b-16.html Get the date /
time difference with PHP
* @param string $start
* @param string $end
* @return array
*/
function get_time_difference( $start, $end )
{
$uts['start'] = strtotime( $start );
$uts['end'] = strtotime( $end );
if( $uts['start']!==-1 && $uts['end']!==-1 )
{
if( $uts['end'] >= $uts['start'] )
{
$diff = $uts['end'] - $uts['start'];
if( $days=intval((floor($diff/86400))) )
$diff = $diff % 86400;
if( $hours=intval((floor($diff/3600))) )
$diff = $diff % 3600;
if( $minutes=intval((floor($diff/60))) )
$diff = $diff % 60;
$diff = intval( $diff );
return( array('days'=>$days, 'hours'=>$hours,
'minutes'=>$minutes, 'seconds'=>$diff) );
}
else
{
trigger_error(
"Ending date/time is earlier than the start date/time", E_USER_WARNING );
}
}
else
{
trigger_error( "Invalid date/time data detected",
E_USER_WARNING );
}
return( false );
}
?>
- advertentie
-
Re: foutje in PHP script
Leihcim was zeer hard aan het denken :
> Sievert wrote:
>> 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.
>>
>
> Op zich een aardig idee, al zou ik eerder stellen dat het aantal bezoekers
> in de afgelopen 5 minuten weergegeven wordt. Het probleem zit in het
> berekenen van het tijdsverschil. Ik heb het script iets aangepast met een
> functie die ik op internet vond, volgens mij zou het zo correct moeten
> werken.
>
> zie ook: http://www.gidnetwork.com/b-16.html
>
> <?php
>
Beste Leihcim,
Bedankt voor je vlotte reactie.
Ik heb jouw aangepaste script online gezet en het lijkt goed te werken.
Nu kijken of het probleem is opgelost, maar ik heb groot vertrouwen in
jouw deskundigheid. Je hebt goed gespit in de tijdsverschilfunctie.
Je schrijft: "al zou ik eerder stellend at het aantal bezoekers in de
afgelopen 5 minuten weergeven wordt."
Dit had ik ook al zo ingesteld. Ik vind dat namelijk een "eerlijke"
grens om te tellen. Veel websites waarop je via een accoutn een
tellertje kunt gebruiken gebruiken een tijdsverloop van 1 minuut. Dat
vind ik persoonlijk te kort.
Ik zal je op de hoogte houden of het probleem nu is opgelost. Tot eerst
maar zover deze reacties.
Mag ik je nogmaals hartelijk bedanken voor je hulp?
Met vriendelijke groet,
Sievert.
-
Re: foutje in PHP script
>
> Beste Leihcim,
>
> Bedankt voor je vlotte reactie.
> Ik heb jouw aangepaste script online gezet en het lijkt goed te werken. Nu
> kijken of het probleem is opgelost, maar ik heb groot vertrouwen in jouw
> deskundigheid. Je hebt goed gespit in de tijdsverschilfunctie.
>
> Je schrijft: "al zou ik eerder stellend at het aantal bezoekers in de
> afgelopen 5 minuten weergeven wordt."
> Dit had ik ook al zo ingesteld. Ik vind dat namelijk een "eerlijke" grens om
> te tellen. Veel websites waarop je via een accoutn een tellertje kunt
> gebruiken gebruiken een tijdsverloop van 1 minuut. Dat vind ik persoonlijk te
> kort.
>
> Ik zal je op de hoogte houden of het probleem nu is opgelost. Tot eerst maar
> zover deze reacties.
>
> Mag ik je nogmaals hartelijk bedanken voor je hulp?
>
> Met vriendelijke groet,
>
> Sievert.
Beste Leihcim,
Ik heb het script de hele dag laten draaien en getest, en het werkt
super! Ik heb geen fouten kunnen vinden.
Bovendien ( ik heb met mijn gebrekkige kennis de code eens goed
bekeken) ziet de code er duidelijker en begrijpelijker uit.
Maar wat voor mij het belangrijkst is: het werkt!
Met vr.gr.,
Sievert.



LinkBack URL
About LinkBacks
