在网站开发中,统计在线人数是常见的需求。本文将介绍PHP获取在线人数的3种实用方法,帮助开发者快速实现这一功能。
// session.php
session_start();
if (!isset($_SESSION['online'])) {
$_SESSION['online'] = true;
file_put_contents('online.txt', (int)file_get_contents('online.txt') + 1);
}
register_shutdown_function(function() {
if (isset($_SESSION['online'])) {
file_put_contents('online.txt', (int)file_get_contents('online.txt') - 1);
}
});
$online = file_get_contents('online.txt');
echo "当前在线人数:$online";
// db_online.php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
// 用户访问时更新或插入记录
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$stmt = $pdo->prepare("INSERT INTO online_users (ip, last_activity) VALUES (?, ?) ON DUPLICATE KEY UPDATE last_activity = ?");
$stmt->execute([$ip, $time, $time]);
// 删除超过5分钟不活动的用户
$pdo->exec("DELETE FROM online_users WHERE last_activity < " . (time() - 300));
// 获取在线人数
$count = $pdo->query("SELECT COUNT(*) FROM online_users")->fetchColumn();
echo "当前在线人数:$count";
// redis_online.php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$ip = $_SERVER['REMOTE_ADDR'];
$expire = 300; // 5分钟
// 设置用户IP为键,过期时间
$redis->setex("online:$ip", $expire, 1);
// 获取所有在线用户
$keys = $redis->keys('online:*');
$count = count($keys);
echo "当前在线人数:$count";
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Session | 实现简单 | 不够精确 | 小型网站 |
| 数据库 | 数据持久化 | 性能开销大 | 中型网站 |
| Redis | 高性能 | 需要Redis支持 | 大型高并发网站 |
通过以上三种方法,开发者可以根据项目需求选择最适合的方式实现PHP在线人数统计功能。