用 PHP 實現線上人數統計

基於 HTTP 協定的限制,要實現統計線上人數會很困難。而現時大部份網站或論壇所使用的方法是,統計在過去某段時間內有所活動的訪客,便計算為線上人數,本文會介紹使用 PHP + MySQL 製作一個線上人數計數器。
在開始前請先確定網頁伺服器支援 PHP 4.3.x,以及有一個可用的 MySQL 資料庫,如果沒有 MySQL 資料庫,請向你的系統管理員或網頁寄存供應商查詢。

建立資料庫

第一步需要先建立一個 MySQL 資料表,可以在文字模式或 phpmyadmin 下執行以下 SQL 語句:

01 CREATE TABLE `online_counter`(
02 `hash` varchar(50) not null,
03 `remote_addr` varchar(20) not null,
04 `time` int(10) not null)

PHP 程式碼 當建立以上資料表後,便可以編寫 PHP 程式了,以下例子假設你的 MySQL 登入資料如下:
Host: localhost
username: dbuser
password: dbpasswd
database: dbname

請注意,在使用以下程式碼時,請根據你的實際需要修改 MySQL 登入資料:

01 <?php
02 // create mysql connection
03 $db_conn = mysql_connect("localhost", "dbuser", "dbpasswd");
04 mysql_select_db("dbname", $db_conn);
05
06 // check and make hash string
07 if(!isset($_SESSION["hash"])){
08 $hash = md5(time());
09 session_register("hash");
10 $_SESSION["hash"] = $hash;
11 }
12
13 // update database
14 $time = time();
15 $query = mysql_query("select hash from `online_counter` where hash='".$_SESSION["hash"]."'");
16 if($rows = mysql_fetch_row($query)){
17 mysql_query("update `online_counter` set `time`='".$time."' where hash='".$_SESSION["hash"]."'");
18 }else{
19 mysql_query("insert into `online_counter` values('".$_SESSION["hash"]."', '".$_SERVER["REMOTE_ADDR"]."', '".$time."')");
20 }
21
22 // get online users
23 $counter_time = $time – 600; // 10 mins
24 $online_query = mysql_query("select count(*) as total from `online_counter` where `time` > '".$counter_time."'");
25 $online_counter = mysql_fetch_array($online_query);
26
27 // delete old record
28 mysql_query("delete from `online_counter` where `time` < '".$counter_time."'");
29 ?>

在以上例子,$online_counter['total'] 就是在過去 10 分鐘內在網站有活動的人數。

1 則回應給 用 PHP 實現線上人數統計

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

分類
BlogUpp!