第一种
<?php
//首先你要有读写文件的权限,首次访问肯不显示,正常情况刷新即可
$online_log = "slzxrs.dat"; //保存人数的文件到根目录,
$timeout = 30;//30秒内没动作者,认为掉线
$entries = file($online_log);
$temp = array();
for ($i=0;$i<count($entries);$i++){
$entry = explode(",",trim($entries[$i]));
if(($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp
}
}
array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."\n"); //更新浏览者的时间
$slzxrs = count($temp); //计算在线人数
$entries = implode("",$temp);
//写入文件
$fp = fopen($online_log,"w");
flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件系统中正常工作
fputs($fp,$entries);
flock($fp,LOCK_UN);
fclose($fp);
$tj= "在线人数:".$slzxrs."人";
?>
第二种
<?php
$filename = 'online.txt' ; //数据文件
$cookiename = 'VGOTCN_OnLineCount' ; //cookie名称
$onlinetime =600; //在线有效时间,单位:秒 (即600等于10分钟)
$online =file( $filename );
//PHP file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false
$nowtime = $_SERVER [ 'REQUEST_TIME' ];
$nowonline = array ();
//得到仍然有效的数据
foreach ( $online as $line ){
$row = explode ( '|' , $line );
$sesstime =trim( $row [1]);
if (( $nowtime - $sesstime )<= $onlinetime ){ //如果仍在有效时间内,则数据继续保存,否则被放弃不再统计
$nowonline [ $row [0]]= $sesstime ; //获取在线列表到数组,会话ID为键名,最后通信时间为键值
}
}
/*
@创建访问者通信状态
使用cookie通信
COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时
*/
if (isset( $_COOKIE [ $cookiename ])){ //如果有COOKIE即并非初次访问则不添加人数并更新通信时间
$uid = $_COOKIE [ $cookiename ];
} else { //如果没有COOKIE即是初次访问
$vid =0; //初始化访问者ID
do { //给用户一个新ID
$vid ++;
$uid = 'U' . $vid ;
} while ( array_key_exists ( $uid , $nowonline ));
setcookie( $cookiename , $uid );
}
$nowonline [ $uid ]= $nowtime ; //更新现在的时间状态
//统计现在在线人数
$total_online = count ( $nowonline );
//写入数据
if ( $fp =@ fopen ( $filename , 'w' )){
if ( flock ( $fp ,LOCK_EX)){
rewind ( $fp );
foreach ( $nowonline as $fuid => $ftime ){
$fline = $fuid . '|' . $ftime . "\n" ;
@ fputs ( $fp , $fline );
}
flock ( $fp ,LOCK_UN);
fclose( $fp );
}
}
echo 'document.write("' . $total_online . '");' ;