插件窝 干货文章 PHP如何获取在线人数?3种高效方法详解

PHP如何获取在线人数?3种高效方法详解

PHP获取在线人数的3种常用方法

在网站开发中,统计在线人数是常见的需求。本文将介绍PHP获取在线人数的3种实用方法,帮助开发者快速实现这一功能。

方法一:使用Session统计在线人数

// 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高效统计

// 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支持 大型高并发网站

优化建议

  • 对于高流量网站,推荐使用Redis方案
  • 可以结合IP和UserAgent识别用户,提高准确性
  • 定期清理过期数据,避免数据膨胀
  • 考虑使用缓存减少数据库查询

通过以上三种方法,开发者可以根据项目需求选择最适合的方式实现PHP在线人数统计功能。