wibus 发表于 2021-2-15 12:48

【PHP】简单的实时在线人数统计

## 效果

![]()

> 来自我的博客的真实截图

## 实现

```php
//在线人数
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);
      if(($nowtime - $sesstime)<=$onlineTime){
            $nowonline[$row]=$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
<?php echo online_users() ?>
```

我博客上是这样子的:

```php
<p><?php echo online_users() ?>&nbsp;位小伙伴正在浏览</p>
```

First丶云心 发表于 2021-2-15 14:39

andyfky 发表于 2021-2-15 16:08

学习了,学习了。

zhzh01 发表于 2021-2-19 10:47

谢谢分享,学习了

xjdasitu 发表于 2021-2-19 20:58

向大佬学习,谢谢分享
页: [1]
查看完整版本: 【PHP】简单的实时在线人数统计