php 实时统计在线人数
封面图
•
2025-11-18
•
PHP
184
0
0
0
在 PHP 中,**实时统计在线人数**(即当前访问网站的用户数)可以通过以下几种方式实现。由于 PHP 是一种服务器端语言,它本身无法直接知道“谁在线”,但可以通过一些机制来估算或记录在线用户。 --- ## ✅ 一、使用 Session 和文件/数据库记录 ### 方法:通过 `session` 和文件/数据库记录用户登录状态 #### 1. 使用文件记录在线人数 ```php <?php session_start(); // 设置 session 超时时间(例如 30 秒) $timeout = 30; // 文件路径 $file = 'online_users.txt'; // 获取当前时间戳 $time = time(); // 读取文件内容 $users = file_exists($file) ? file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) : []; // 过滤掉超时的用户 $active_users = array_filter($users, function ($user) use ($time, $timeout) { list($user_id, $last_active_time) = explode('|', $user); return ($time - $last_active_time) < $timeout; }); // 添加当前用户(假设用户 ID 为 session_id) $current_user = session_id() . '|' . $time; // 写入文件 file_put_contents($file, implode("\n", array_merge($active_users, [$current_user]))); // 统计在线人数 $online_count = count($active_users); echo "当前在线人数: " . $online_count; ?> ``` > **注意**:这种方式适合小型网站,不适合高并发场景。 --- ## ✅ 二、使用数据库记录在线人数(推荐) ### 步骤: 1. 创建一个 `online_users` 表: ```sql CREATE TABLE online_users ( id INT AUTO_INCREMENT PRIMARY KEY, session_id VARCHAR(255) NOT NULL UNIQUE, last_active TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 2. PHP 程序中插入或更新用户信息: ```php <?php session_start(); $host = 'localhost'; $db = 'your_database'; $user = 'username'; $pass = 'password'; $conn = new mysqli($host, $user, $pass, $db); // 检查连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $session_id = session_id(); $timeout = 30; // 30秒 // 更新或插入当前用户 $stmt = $conn->prepare("INSERT INTO online_users (session_id) VALUES (?) ON DUPLICATE KEY UPDATE last_active = NOW()"); $stmt->bind_param("s", $session_id); $stmt->execute(); // 删除超时用户 $stmt = $conn->prepare("DELETE FROM online_users WHERE last_active < DATE_SUB(NOW(), INTERVAL ? SECOND)"); $stmt->bind_param("i", $timeout); $stmt->execute(); // 查询在线人数 $result = $conn->query("SELECT COUNT(*) AS count FROM online_users"); $row = $result->fetch_assoc(); echo "当前在线人数: " . $row['count']; ?> ``` > **优点**:可扩展性强,适合大型网站。 --- ## ✅ 三、使用 Redis 实现高性能在线人数统计 Redis 是一个内存数据库,非常适合做实时统计。 ### 示例代码: ```php <?php session_start(); $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $session_id = session_id(); $timeout = 30; // 30秒 // 设置 session 的过期时间 $redis->setex("user:$session_id", $timeout, time()); // 删除超时的用户(可以定时执行) $redis->eval( "local keys = redis.call('KEYS', 'user:*') for i, key in ipairs(keys) do local expire = redis.call('TTL', key) if expire < 0 then redis.call('DEL', key) end end", 0 ); // 获取在线人数 $keys = $redis->keys("user:*"); $online_count = count($keys); echo "当前在线人数: " . $online_count; ?> ``` > **优点**:性能高,适合大规模并发访问。 --- ## ✅ 四、使用 WebSocket 实现实时统计(高级) 如果你需要更实时的在线人数统计(比如聊天室),可以结合 **WebSocket + PHP + Redis** 来实现。 不过这属于进阶内容,建议先从上述方法开始。 --- ## ✅ 总结对比 | 方法 | 是否支持高并发 | 是否需要数据库 | 是否实时 | 适用场景 | |------------|----------------|----------------|----------|------------------| | 文件记录 | 不适合 | 否 | 一般 | 小型网站 | | 数据库记录 | 推荐 | 是 | 高 | 中大型网站 | | Redis | 推荐 | 是 | 极高 | 高并发、实时统计 | --- 如需我帮你封装成一个完整的类或工具函数,也可以告诉我!
上一篇:
FSO的强大功能
下一篇:
设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30
标题录入,一次不能超过6条
留言
评论