製作簡單 PHP 計數器

製作簡單 PHP 計數器
在網站上其中一樣最常見的程式是計數器,本文將會講述如何製作一個簡單的 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($fp, LOCK_EX); // do an exclusive lock
08 fwrite($fp, $counter);
09 flock($fp, LOCK_UN); // release the lock
10 fclose($fp);
11 setcookie("visitor", 1, time()+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($fp, LOCK_EX); // do an exclusive lock
08 fwrite($fp, $counter);
09 flock($fp, LOCK_UN); // release the lock
10 fclose($fp);
11 setcookie("visitor", 1, time()+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, $i, 1) . ".gif' border='0'>";
18 }
19 ?>

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

發佈留言

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

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

分類
BlogUpp!