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

PHP 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)
);

核心邏輯流程

  1. 設定逾時秒數(如 300 秒)。
  2. 取得目前時間戳記 $timestamp = time()。
  3. 計算門檻 $timeout = $timestamp - $timeoutseconds。
  4. 連線資料庫。
  5. 插入當前訪客紀錄(IP、請求頁面、時間戳)。
  6. 刪除逾時紀錄 DELETE FROM useronline WHERE timestamp < $timeout。
  7. 查詢當前頁面不重複 IP 數 SELECT DISTINCT ip FROM useronline WHERE file = '...'。
  8. 統計行數 mysqli_num_rows() 即為線上人數。
  9. 關閉連線並輸出結果。

完整程式碼 (mysqli 版)

<?php
$server = 'localhost';
$db_user = 'root';
$db_pass = 'password';
$database = 'users';
$timeoutseconds = 300;

$timestamp = time();
$timeout = $timestamp - $timeoutseconds;

$conn = mysqli_connect($server, $db_user, $db_pass, $database);
if (!$conn) die('連線失敗');

// 插入訪客
$ip = mysqli_real_escape_string($conn, $_SERVER['REMOTE_ADDR']);
$file = mysqli_real_escape_string($conn, $_SERVER['PHP_SELF']);
$insert = mysqli_query($conn, "INSERT INTO useronline VALUES ($timestamp, '$ip', '$file')");
if (!$insert) echo 'Insert Failed';

// 清除逾時
$delete = mysqli_query($conn, "DELETE FROM useronline WHERE timestamp < $timeout");
if (!$delete) echo 'Delete Failed';

// 統計線上人數
$result = mysqli_query($conn, "SELECT DISTINCT ip FROM useronline WHERE file = '$file'");
if (!$result) echo 'Select Error';
$user = mysqli_num_rows($result);

mysqli_close($conn);

if ($user == 1) {
    echo '1 user online';
} else {
    echo "$user users online";
}
?>

安全性建議

  • 使用 mysqli_real_escape_string() 或預處理語句防止 SQL 注入。
  • 資料庫帳號務必設定強密碼。
  • 考慮使用 Redis 或 Memcached 替代資料庫提升效能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved