简单的实时在线人数统计

2021 年 2 月 15 日 星期一(已编辑)
/
191
这篇文章上次修改于 2022 年 12 月 29 日 星期四,可能部分内容已经不适用,如有疑问可询问作者。

简单的实时在线人数统计

实现

//在线人数
function online_users() {
    $filename='online.txt';
    $CookieName='OnLinePerson';
    $onlineTime=30;
    $online=file($filename);
    $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;
        }
    }
    if(isset($_COOKIE[$CookieName])){
        $uid=$_COOKIE[$CookieName];
    }else{
        $vid=0;
        do{
            $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 "$total_online";
}

这里解释下一些变量吧:

  • $filename 数据文件的名字
  • $CookieName Cookie名称,这里使用Cookie进行记录,当然你也可以用本地储存der
  • $onlineTime 在线有效时间,以秒为单位,超过这个时间没有动作将会记为掉线

我使用的是Typecho主题,所以我将会把上面的代码放入functions.php内

当然你是其他程序的也可以用的,具体怎么放就要看实际情况了

调用

<?php echo online_users() ?>

我博客上是这样子的:

<p><?php echo online_users() ?> 位小伙伴正在浏览</p>
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...