PHP 实时统计网站在线人数和累计观看人数
这段代码使用了两个函数:sxcs() 和 slzxrs()。
sxcs() 函数用于统计累计观看人数,通过读取文件 sxcs.dat 获取当前观看人数,加 1 后写入文件,并返回累计观看人数。
slzxrs() 函数用于获取当前在线人数,通过读写文件 slzxrs.dat 实现。读取文件中的所有记录,删除时间超过 30 秒的记录,添加当前访问者的记录,并返回在线人数。
代码中使用了 getenv('REMOTE_ADDR') 获取访问者的 IP 地址,并通过 time() 函数获取当前时间戳来判断是否超时。
最后,页面中调用这两个函数显示实时更新的在线人数和累计观看人数。
<?php
function sxcs() {
$list = file_get_contents('sxcs.dat');
$myfile = fopen("sxcs.dat", "w");
$sxcs = ($list + 1);
fwrite($myfile, "$sxcs");
fclose($myfile);
return $sxcs;
}
function slzxrs() {
// 首先你要有读写文件的权限,首次访问肯不显示,正常情况刷新即可
$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);
// echo "观看人数:" . $slzxrs . "人";
return $slzxrs;
}
?>
<h6><center><p>当前在线:<?php echo slzxrs(); ?> 人_ 累计观看人数:<?php echo sxcs(); ?> 人</p></center></h6>
原文地址: https://www.cveoy.top/t/topic/npTr 著作权归作者所有。请勿转载和采集!