Home  >  Article  >  Backend Development  >  php获取网站当前在线人数的方法

php获取网站当前在线人数的方法

WBOY
WBOYOriginal
2016-06-20 13:02:412184browse

一、利用php实现简单的计算当前网站在线人数的方法,只是简单的通过计算访问者ip地址从而得出一个大致的结果,不能精确的计算当前在线人数。

<p><?php</p>header('Content-type: text/html; charset=utf-8');<br />//author:www.scutephp.com<br />$online_log='count.txt';//保存在线人数数据的文件, <br />$timeout=45;//45秒内没有动作,则被认识是掉线 <br />$entries=file($online_log);//将文件作为一个数组返回,数组中的每个单元都是文件中相应的一行,包括换行符在内<br />$temp=array();<br />for($i=0;$i<count($entries);$i++){<br />	$entry=explode(',',trim($entries[$i]));<br />	if(($entry[0]!=getenv('REMOTE_ADDR'))&&($entry[1]>time())){<br />		array_push($temp,$entry[0].','.$entry[1].'n');//取出其他浏览者的信息,并去掉超时者,保存进$temp <br />	}<br />}<br />array_push($temp,getenv('REMOTE_ADDR').','.(time()+($timeout))."\n");//更新浏览者的时间 <br />$users_online=count($temp);//计算在线人数<br />$entries=implode('',$temp);<br />//写入文件 <br />$fp=fopen($online_log,'w');<br />flock($fp,LOCK_EX);//注意 flock() 不能在NFS以及其他的一些网络文件系统中正常工作 <br />fputs($fp,$entries);<br />flock($fp,LOCK_UN);<br />fclose($fp);<br /><p>echo '当前有'.$users_online.'人在线';

二、利用php比较精确的统计在线人数的办法,注意这里所说的精确是指个数,如果需要精确在时间上,则需要根据实际情况调整代码中的有效时间。

<?php<br />//author:www.scutephp.com<br />$filename='online.txt';//数据文件<br />$cookiename='VGOTCN_OnLineCount';//cookie名称<br />$onlinetime=600;//在线有效时间,单位:秒 (即600等于10分钟)<br /><br />$online=file($filename);<br />//PHP file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false<br />$nowtime=$_SERVER['REQUEST_TIME'];<br />$nowonline=array();<br />//得到仍然有效的数据<br />foreach($online as $line){<br />	$row=explode('|',$line);<br />	$sesstime=trim($row[1]);<br />	if(($nowtime - $sesstime)<=$onlinetime){//如果仍在有效时间内,则数据继续保存,否则被放弃不再统计<br />		$nowonline[$row[0]]=$sesstime;//获取在线列表到数组,会话ID为键名,最后通信时间为键值<br />	}<br />}<br />/*<br />@创建访问者通信状态<br />使用cookie通信<br />COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时<br />*/<br />if(isset($_COOKIE[$cookiename])){//如果有COOKIE即并非初次访问则不添加人数并更新通信时间<br />	$uid=$_COOKIE[$cookiename];<br />}else{//如果没有COOKIE即是初次访问<br />	$vid=0;//初始化访问者ID<br />	do{//给用户一个新ID<br />		$vid++;<br />		$uid='U'.$vid;<br />	}while(array_key_exists($uid,$nowonline));<br />	setcookie($cookiename,$uid);<br />}<br />$nowonline[$uid]=$nowtime;//更新现在的时间状态<br />//统计现在在线人数<br />$total_online=count($nowonline);<br />//写入数据<br />if($fp=@fopen($filename,'w')){<br />	if(flock($fp,LOCK_EX)){<br />		rewind($fp);<br />		foreach($nowonline as $fuid=>$ftime){<br />			$fline=$fuid.'|'.$ftime."\n";<br />			@fputs($fp,$fline);<br />		}<br />		flock($fp,LOCK_UN);<br />		fclose($fp);<br />	}<br />}<br />echo 'document.write("'.$total_online.'");';


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn