第一种

<?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 . '");' ;
最后修改:2022 年 09 月 23 日

感谢看完,可以点个赞~请作者喝杯咖啡~ヾ(◍°∇°◍)ノ゙❤