首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

PHP + MySQL 實現網站實時在線人數統計

     編輯:關於SqlServer

採用 MySQL 存儲訪客心跳記錄,結合 PHP 定期清理過期數據,即可輕鬆實現「當前在線人數」統計。本文提供完整建表語句、核心邏輯代碼與部署說明,可直接集成至項目。

資料表設計

CREATE TABLE useronline (
    timestamp INT(15) DEFAULT '0' NOT NULL,
    ip        VARCHAR(40) NOT NULL,
    file      VARCHAR(100) NOT NULL,
    PRIMARY KEY (timestamp),
    KEY ip (ip),
    KEY file (file)
);
  • timestamp:訪問時間戳(秒),主鍵保證唯一性。
  • ip:訪客 IP,建立索引加速去重查詢。
  • file:當前請求腳本路徑($_SERVER['PHP_SELF']),支援頁面級統計。

核心參數配置

$server        = "localhost";
$db_user       = "root";
$db_pass       = "your_password";   // 強烈建議設置強密碼
$database      = "users";
$timeoutseconds = 300;              // 5 分鐘無刷新視為離線
$timestamp     = time();
$timeout       = $timestamp - $timeoutseconds;

完整業務流程代碼

<?php
// 1. 連接資料庫
$conn = mysql_connect($server, $db_user, $db_pass);
if (!$conn) die("DB Connect Failed");

// 2. 選擇庫
mysql_select_db($database, $conn);

// 3. 記錄本次訪問(INSERT IGNORE 避免主鍵衝突報錯)
$ip   = $_SERVER['REMOTE_ADDR'];
$file = $_SERVER['PHP_SELF'];
$sql  = "INSERT INTO useronline (timestamp, ip, file) VALUES ($timestamp, '$ip', '$file')";
mysql_query($sql, $conn);

// 4. 清理過期記錄
mysql_query("DELETE FROM useronline WHERE timestamp < $timeout", $conn);

// 5. 統計當前頁面唯一 IP 數
$result = mysql_query("SELECT DISTINCT ip FROM useronline WHERE file = '$file'", $conn);
$user   = mysql_num_rows($result);

// 6. 輸出結果
mysql_close($conn);
echo ($user == 1) ? "1 user online\n" : "$user users online\n";
?>

關鍵點補充

  • 併發安全:主鍵為 timestamp,極高併發下可能衝突,生產環境建議改用 BIGINT AUTO_INCREMENT 主鍵 + UNIQUE KEY (ip, file)。
  • 擴展性:若流量大,可改用 Redis/Memcached 存儲心跳,定時同步落庫;或採用 HyperLogLog 估算去重計數。
  • 安全:生產務必使用 mysqli/PDO + 預處理語句防注入,本文為教學示例保留舊 API。

部署建議

  1. 將上述代碼保存為 online.php。
  2. 在需顯示在線人數的頁面 include 'online.php'; 或 AJAX 請求該接口。
  3. 配置 Cron 任務定期清理歷史數據(或依賴訪問觸發的上述 DELETE)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved