PHP获取统计并获取网站在线人数
这里我使用的方法是通过记录5分钟内,访问网站的用户的IP地址,来判断当前在线人数。
首先我们需要两个函数,一个是获取客户端IP的函数
/**
* 获取客户端IP
* @return string
*/
function getip() { //获取客户端IP
if ( isset($_SERVER[ "HTTP_CDN_SRC_IP" ]) ) { //获取网宿CDN真实客户IP
return replace_ip( $_SERVER[ "HTTP_CDN_SRC_IP" ] );
}
if ( isset($_SERVER[ "HTTP_X_FORWARDED_FOR" ]) ) { //获取网宿、阿里云真实客户IP,参考:https://help.aliyun.com/knowledge_detail/40535.html
return replace_ip( $_SERVER[ "HTTP_X_FORWARDED_FOR" ] );
}
if ( isset($_SERVER[ "HTTP_CLIENT_IP" ]) ) {
return $_SERVER[ "HTTP_CLIENT_IP" ];
}
if ( isset($_SERVER[ "HTTP_X_FORWARDED" ]) ) {
return $_SERVER[ "HTTP_X_FORWARDED" ];
}
if ( isset($_SERVER[ "HTTP_FORWARDED_FOR" ]) ) {
return $_SERVER[ "HTTP_FORWARDED_FOR" ];
}
if ( isset($_SERVER[ "HTTP_FORWARDED" ]) ) {
return $_SERVER[ "HTTP_FORWARDED" ];
}
$httpip = $_SERVER[ 'REMOTE_ADDR' ];
if ( !preg_match( "/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/", $httpip ) ) {
$httpip = "127.0.0.1";
}
return $httpip;
}
还有一个是拆分代理IP函数
/**
* 拆分代理IP
* @return string
*/
function replace_ip($ip)
{
if (!$ip) {
return "";
}
$httpip_array = explode(",", $ip);
if ($httpip_array[0]) {
return $httpip_array[0];
} else {
return $ip;
}
}
接着便是主要代码:
/**
*
* 用户在线数量统计
*
* */
// 获取用户 IP 地址
$userIP = getip();
// 获取当前时间戳
$currentTime = $date;
// 设置在线时间间隔(5分钟)
$timeout = $currentTime - (5 * 60);
// 创建或打开文件以保存在线用户数据
$file = fopen("online_users.txt", "c+");
// 获取文件中的数据
$users = unserialize(fread($file, filesize("online_users.txt")));
// 如果用户数据不是数组,则初始化为空数组
if (!is_array($users)) {
$users = [];
}
// 更新当前用户的在线时间
$users[$userIP] = $currentTime;
// 删除超时的用户
foreach ($users as $ip => $lastTime) {
if ($lastTime < $timeout) {
unset($users[$ip]);
}
}
// 重置文件指针,并清空文件内容
ftruncate($file, 0);
rewind($file);
// 将更新后的用户数据写入文件
fwrite($file, serialize($users));
// 关闭文件
fclose($file);
//在线人数
$online_users = count($users);
最后这个变量 $online_users
就是在线人数了,放到想要输出的位置,进行输出即可。
在线人数 <?php echo $online_users;?> 人