如何用php编写一个显示当前在先人数的程序,有些网站可能需要这样的功能,下面有一个php现在人数的程序,希望对大家有点用:
*本程序可以直接运行,第一次可能因为当前目录下[count.dat]文件不存在报错,但不影响程序执行
header('Content-type: text/html; charset=utf-8');
$online_log = "count.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] != $_SERVER["REMOTE_ADDR"]) && ($entry[1] > time())) {
array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp
}
}
array_push($temp,$_SERVER["REMOTE_ADDR"].",".(time() + ($timeout))."\n"); //更新浏览者的时间
$users_online = 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 "当前在线".$users_online."人";
方法二、php+mysql 获取网站在线人数
1.创建一个名为online_users
的数据表,用于存储在线用户的信息。表结构如下:
CREATE TABLE online_users (
ip_address VARCHAR(50) PRIMARY KEY,
last_activity INT
);
2.在页面的开始处添加以下代码,记录用户的访问日志:
<?php
include 'db_connection.php'; // 包含数据库连接文件
$ip_address = $_SERVER['REMOTE_ADDR']; // 获取用户的IP地址
$current_time = time();
// 更新或插入用户信息到online_users表
$sql = "REPLACE INTO online_users (ip_address, last_activity) VALUES ('$ip_address', '$current_time')";
mysqli_query($connection, $sql);
?>
3.创建一个名为get_online_users.php的PHP文件,用于获取在线用户数量:
<?php
include 'db_connection.php'; // 包含数据库连接文件
// 获取当前时间戳
$current_time = time();
// 删除超过30秒未活动的用户
$expiry_time = $current_time - 30;
$sql = "DELETE FROM online_users WHERE last_activity < '$expiry_time'";
mysqli_query($connection, $sql);
// 获取在线用户数量
$sql = "SELECT COUNT(*) AS online_users FROM online_users";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_assoc($result);
$online_users = $row['online_users'];
echo "当前在线人数: " . $online_users;
?>
请注意,通过IP地址来判断在线用户数量存在一定的局限性,特别是在用户处于同一网络环境下(如公司或家庭网络)的情况下。因为多个用户可能共享同一IP地址,这种方式可能无法准确统计在线人数。因此,这种方法只能提供一个大致的在线人数信息。