How many users are connected?
This two function returns the number of users connected to your site. Since HTTP is asyncronous, the only way to…
This two function returns the number of users connected to your site.
Since HTTP is asyncronous, the only way to do this is to store the IPS and the moment when every user retrive a page.
And whenever a page is called, check if the user is already in the stored IPS, if he is already present update his timer else add him to the list.
You have to call the howManyIps() function in every page to keep the counter updated.
Watch demo, whatch source.
The first function get the IP of the connected user:
function getIP() {
$ip="";
if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR");
else $ip = "";
return $ip;
}
This function makes the job: store the IPS, count, store the timers.
function howManyIps() {
$filename = "./howmanyip.log";
$seconds = 300;
$yourIP = getIP();
if (file_exists($filename.".lock")) $readonly = true; else $readonly=false;
$count = 0;
//lock the file
if (!$readonly) $fpLock = fopen($filename.".lock", "w");
//read data ips
$fp = @fopen($filename, "r");
$arIPS=explode ("\n", @fread($fp,filesize($filename)) );
@fclose($fp);
//if file is locked get out
if ($readonly) return count($arIPS);
$s = "";
$already=false;
//update data and search user ip
for ($i=0;$i<count($arIPS);$i++) {
$arData= explode (" ", $arIPS[$i]);
//update your user timer
if ($yourIP==$arData[0]) {
$already=true;
$arData[1]=time();
}
// check if user is old
if ( time()- (integer)$arData[1] < $seconds ){
$s.=$arData[0]." ".$arData[1]."\n";
$count++;
}
}
if (!$already) {
//your user is new, add it to the list
$s.=$yourIP." ".time()."\n";
$count++;
}
//save the list
$fp = fopen($filename, "w");
fwrite($fp,$s);
fclose($fp);
//remove thr lock
fclose($fpLock);
unlink($filename.".lock");
return $count;
}