製作簡單 PHP 計數器

文章位置: 主頁 > 文章資料庫 > PHP 教學 > 製作簡單 PHP 計數器
瀏覽次數: 27824
更新時間: 2005/06/01 15:34

在網站上其中一樣最常見的程式是計數器,本文將會講述如何製作一個簡單的 PHP 計數器,包括文字及圖形兩種顯示模式。

準備工作

計數器的原理十分簡單,只要使用資料庫或文字檔儲存瀏覽人數,當有新訪客時便將人數加 1。因為只要單純紀錄瀏覽人數,所以會介紹使用使用文字檔,這樣即使沒有 MySQL 資料庫也可以做到。

首先建立一個文字檔,例如 "counter.dat",裡面只包含一個數目字 "0",記得要將它 chmod 777,這樣 php 才可更新人數。

文字計數器

現在開始了,以下是紀錄人數的例子:

01 <?php
02 $counter 
intval(file_get_contents("counter.dat")) + 1;
03
$fp fopen("counter.dat""w");
04
fwrite($fp$counter);
05
fclose($fp);
06
07 echo 
"Visitors: " $counter;
08
?>


以上程式碼會先取得 counter.dat 的內容並加 1,再將新結果寫入 counter.dat 內。
但這裡有兩個很大的問題,就是當兩個訪客同時間進入時,會產生數值歸零(雖然機會小,但對高流量網站很大機會發生),以及相同使用者 reload 時也會同樣計算在內,以下是修正以上問題的方法:

01 <?php
02 $counter 
intval(file_get_contents("counter.dat"));
03
04 if(!isset(
$_COOKIE['visitor'])){
05     
$counter++;
06     
$fp fopen("counter.dat""w");
07     
flock($fpLOCK_EX);   // do an exclusive lock
08     
fwrite($fp$counter);
09     
flock($fpLOCK_UN);   // release the lock
10     
fclose($fp);
11     
setcookie("visitor"1time()+3600);
12 }
13 echo 
"Visitors: " $counter;
14
?>


以上的 if(!isset($_COOKIE['visitor'])) 這句會檢查是否存在 $_COOKIE['visitor'] 變數,如果不存在的話才寫入紀錄。
flock($fp, LOCK_EX); 是將 counter.dat 鎖定,避免其他程式寫入檔案。
flock($fp, LOCK_UN); 就是解除先前的鎖定。

圖形計數器

上面的程式碼已經可以製作一個簡單的計數器,但只是文字,如果想改由圖片顯示的話,先要用圖像編輯軟件製作 0 至 9 的圖片,名稱分別是 0.gif, 1.gif, 2.gif ...... 9.gif。
然後將檔案放到 images 目錄,並將以上程式碼改成:

01 <?php
02 $counter 
intval(file_get_contents("counter.dat"));
03
04 if(!isset(
$_COOKIE['visitor'])){
05     
$counter++;
06     
$fp fopen("counter.dat""w");
07     
flock($fpLOCK_EX);   // do an exclusive lock
08     
fwrite($fp$counter);
09     
flock($fpLOCK_UN);   // release the lock
10     
fclose($fp);
11     
setcookie("visitor"1time()+3600);
12 }
13
14
// display image counter
15
strval($counter);
16 for(
$i=0$i<strlen($counter); $i++){
17     echo 
"<img src='images/" substr($counter$i1) . ".gif' border='0'>";
18 }
19
?>


注意事項

不論是文字顯示或圖片顯示,以上的程式碼由第 1 行到第 12 到均需放置在頁面的最頂部,不然會發生錯誤。而第 12 行以後的內容就是顯示人數的地程式碼,需放到想要顯示的地方。


====================================================
歡迎轉載,但轉載時請保留此宣告,不得作為商業用途
作者: Sam Tang <admin{at}phpini{dot}com>
來源網站: http://www.phpdc.com/


用戶評論 按這裡發表新評論 
RR user at yourdomain dat com
02 September 2005 02:53
COUNTER.DAT是用TXT來轉的嗎?
 
MPEG7 lazarid at ee dat duth dat gr
07 September 2005 05:04
please, i need help about XMMain.exe and PHP.I don't speak chinese, so please If anyone can help me..
 
fool user at yourdomain dat com
24 January 2006 12:03
請問為什麼第一種寫法數值會歸0?
如果用flock就不會歸0了嗎?
 
 
 發表評論
姓名:
Email:
內容: