在網站上其中一樣最常見的程式是計數器,本文將會講述如何製作一個簡單的 PHP 計數器,包括文字及圖形兩種顯示模式。
準備工作
計數器的原理十分簡單,只要使用資料庫或文字檔儲存瀏覽人數,當有新訪客時便將人數加 1。因為只要單純紀錄瀏覽人數,所以會介紹使用使用文字檔,這樣即使沒有 MySQL 資料庫也可以做到。
首先建立一個文字檔,例如 “counter.dat”,裡面只包含一個數目字 “0”,記得要將它 chmod 777,這樣 php 才可更新人數。
文字計數器
現在開始了,以下是紀錄人數的例子:
|
1 2 3 4 5 6 7 8 |
<?php $counter = intval(file_get_contents("counter.dat")) + 1; $fp = fopen("counter.dat", "w"); fwrite($fp, $counter); fclose($fp); echo "Visitors: " . $counter; ?> |
以上程式碼會先取得 counter.dat 的內容並加 1,再將新結果寫入 counter.dat 內。
但這裡有兩個很大的問題,就是當兩個訪客同時間進入時,會產生數值歸零(雖然機會小,但對高流量網站很大機會發生),以及相同使用者 reload 時也會同樣計算在內,以下是修正以上問題的方法:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $counter = intval(file_get_contents("counter.dat")); if (!isset($_COOKIE['visitor'])) { $counter++; $fp = fopen("counter.dat", "w"); flock($fp, LOCK_EX); // do an exclusive lock fwrite($fp, $counter); flock($fp, LOCK_UN); // release the lock fclose($fp); setcookie("visitor", 1, time()+3600); } echo "Visitors: " . $counter; ?> |
以上的 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 目錄,並將以上程式碼改成:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $counter = intval(file_get_contents("counter.dat")); if (!isset($_COOKIE['visitor'])) { $counter++; $fp = fopen("counter.dat", "w"); flock($fp, LOCK_EX); // do an exclusive lock fwrite($fp, $counter); flock($fp, LOCK_UN); // release the lock fclose($fp); setcookie("visitor", 1, time()+3600); } // display image counter strval($counter); for ($i=0; $i<strlen($counter); $i++) { echo "<img src='images/" . substr($counter, $i, 1) . ".gif' border='0'>"; } ?> |
注意事項
不論是文字顯示或圖片顯示,以上的程式碼由第 1 行到第 12 到均需放置在頁面的最頂部,不然會發生錯誤。而第 12 行以後的內容就是顯示人數的地程式碼,需放到想要顯示的地方。