PHP 实时更新在线人数和累计观看人数
使用 PHP 和 Ajax 实现实时更新在线人数和累计观看人数
该功能可以使用 Ajax 实现实时更新数据。首先,在页面中添加一个定时器,每隔一段时间向服务器发送请求获取最新数据,然后更新页面显示。具体实现如下:
1. 页面代码
<div id='online-num'>当前在线:0 人_ 累计观看人数:0 人</div>
<script src='https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js'></script>
<script>
// 定时器,每隔5秒钟更新一次数据
setInterval(function() {
$.ajax({
url: 'get_data.php',
type: 'get',
dataType: 'json',
success: function(data) {
// 更新页面显示
$('#online-num').html('当前在线:' + data.slzxrs + '人_ 累计观看人数:' + data.sxcs + '人');
}
});
}, 5000);
</script>
2. get_data.php 代码
<?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;
$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].'
');
}
}
array_push($temp,getenv('REMOTE_ADDR').','.(time() + ($timeout)).'
');
$slzxrs = count($temp);
$entries = implode('',$temp);
$fp = fopen($online_log,'w');
flock($fp,LOCK_EX);
fputs($fp,$entries);
flock($fp,LOCK_UN);
fclose($fp);
return $slzxrs;
}
// 返回最新的数据,以json格式返回
echo json_encode(array(
'sxcs' => sxcs(),
'slzxrs' => slzxrs()
));
?>
代码说明
-
页面代码
- 页面中包含一个
div元素,用来显示在线人数和累计观看人数。 - 使用 jQuery 库的
$.ajax()方法发送 Ajax 请求到get_data.php文件。 - 使用
setInterval()函数,每隔 5 秒钟发送一次 Ajax 请求。 - 在 Ajax 请求成功后,使用
data.slzxrs和data.sxcs获取返回的在线人数和累计观看人数,并更新页面显示。
- 页面中包含一个
-
get_data.php 代码
- 该文件包含两个函数:
sxcs()和slzxrs(),分别用来获取累计观看人数和在线人数。 - 两个函数都使用文件操作来记录数据。
sxcs()函数读取sxcs.dat文件,获取累计观看人数,并将其加 1 后写入文件。slzxrs()函数读取slzxrs.dat文件,获取在线用户的 IP 地址和最后活动时间,并更新文件。- 最后,将在线人数和累计观看人数以 JSON 格式返回给前端。
- 该文件包含两个函数:
注意事项
slzxrs.dat和sxcs.dat文件需要在服务器上创建,并确保 PHP 程序具有读写这两个文件的权限。flock()函数在一些网络文件系统上可能无法正常工作,需要根据实际情况进行调整。- 可以根据实际需要调整 Ajax 请求的频率,例如每 1 秒钟或每 10 秒钟发送一次请求。
- 可以根据实际情况调整在线用户超时时间,例如 1 分钟或 5 分钟。
希望这篇文章能帮助你实现实时更新在线人数和累计观看人数的功能。如果你有任何问题,请随时在评论区留言。
原文地址: https://www.cveoy.top/t/topic/npTw 著作权归作者所有。请勿转载和采集!