PHP完全中文操作手冊

天地JPLOP | PHP首頁 | 函數索引
訪客計數器
訪客計數器是讓 Web 訪客知道該網頁或者網站的人氣指數最直接的方法。尤其是想利用網頁賺錢的人,訪客人數是找廣告商最好的說詞。當然可以將網站來訪人數寫成統計報表,但總是感覺直接看到比較真實,到底眼見為憑。

載入圖片中

在上圖中,訪客計數器的流程如下

  1. 第一位用戶瀏覽某頁。
  2. 服務器程序從數據庫或文件中讀取該頁被瀏覽次數。
  3. 將次數加一儲存,並將它送回第一位用戶。
  4. 第二位用戶瀏覽某頁。
  5. 服務器程序從數據庫或文件中讀取該頁被瀏覽次數。
  6. 將次數再加一儲存,並將它送回第二位用戶。

PHP 在沒有特殊的訪客計數器函數,但是我們可以用 PHP 的強大功能自已寫一個訪客計數器函數。

以下的函數是訪客計數器的原型,是由 David W. Bettis 所提供,並經過作者少許修改。

<html>
<head>
<title>訪客計數器 原型</title>
</head>
<body>
<?php
/*
simple access counter for php3
(c)1998 David W. Bettis
dbettis@eyeintegrated.com
medify by Wilson Peng
*/

$counterFile = "/tmp/counter.txt";

function
displayCounter($counterFile) {
$fp = fopen($counterFile,"rw");
$num = fgets($fp,5);
$num += 1;
print
"您是第 "."$num"." 位無聊份子";
exec( "rm -rf $counterFile");
exec( "echo $num > $counterFile");
}

if (!
file_exists($counterFile)) {
exec( "echo 0 > $counterFile");
}

displayCounter($counterFile);

?>
</body>
</html>

Copyright © 1998 David W. Bettis

在讀取到本頁時,PHP 程序先找尋 /tmp/counter.txt 文件是否存在,若不存在,則建立一個 counter.txt 文件,然後將 0 寫入文件。然後讀取 counter.txt 文件的內容,也就是純文字疊,再將內文的數字存入 $num 變量中。在 $num 的變量出現在瀏覽器前,還有經過加一的步驟,讓用戶可以增加。當然,如果想灌水,就在加一步驟時加二或者加三,不過自欺是無用的。最後將訪客人數再回存 /tmp/counter.txt 就一切 OK。


當然,每一頁都要這樣寫,豈不麻煩到了極點。這時,我們可以利用 PHP 提供的 require() 功能,將計數器整理成一個函數,醬子在使用上就方便多多了。

首先要先將 Apache 的配置文件 (httpd.conf) 加入 PHP include 文件的路徑。例如要設所有的 include 文件都在 http://abcdefghijk.com.tw/include 中,可以在 httpd.conf 加入下面的例子

php3_include_path .:./include:../include

別忘了重新啟動 Apache 服務器,新增的 include 路徑纔有效。

./apachectl restart

再來就在服務器的 .../include 目錄中放入以下的文件,文件名存成 counter.inc

下面就是 MyCounter() 函數。為了讓讀者方便了解,程序中的變量 $counterFile、$fp 及 $num 保持和 David W. Bettis 所配置的計數器中的變量功能相同。

<?php
//---------------------------
// 訪客計數器函數 MyCounter()
// Author: Wilson Peng
// Copyright (C) 1999
//---------------------------
function MyCounter() {
$counterFile="/tmp".$GLOBALS["PHP_SELF"];
if (!
file_exists($counterFile)) {
if (!
file_exists(dirname($counterFile))) {
mkdir(dirname($counterFile), 0700);
}
exec("echo 0 > $counterFile");
}
$fp = fopen($counterFile,"rw");
$num = fgets($fp,5);
$num += 1;
print
"$num";
echo
$counterFile;
exec("rm -rf $counterFile");
exec("echo $num > $counterFile");
}
?>

Copyright © 1999, Wilson Peng

當然,要用的話要加 回主目錄 中嵌入 MyCounter() 函數,就可以使用了

<?php
require("counter.inc");
?>
<html>
<head>
<title>訪客計數器 最終版</title>
</head>
<body>
您是第 <? MyCounter(); ?> 位參觀者
</body>
</html>

Copyright © 1999, Wilson Peng

要用這個 MyCounter() 函數,先在 Homepage 的開頭處加入 require() 函數,引入 MyCounter() 函數成為該 Homepage 的一部份。之後再將 <? MyCounter(); ?> 字符串放在需要計數器的地方就可以了。

function MyCounter() {

:
:
}

在建立函數時,需要用上面的格式。在自訂函數名稱前加入 function 字符串。

每頁有用到 MyCounter() 的 Homepage 都會在 /tmp 之後加入該頁的路徑,這可以用 $PHP_SELF 變量達成。

$counterFile="/tmp".$GLOBALS["PHP_SELF"];

當然,若您要將 /tmp 改成別的目錄也可以,不然在 SUN 等服務器,要是 reboot,/tmp 中的東西都沒了,要重新開始再計數了。若您不知要使用什麼目錄,建議使用 /var/log/counter 這個目錄,和其它的 log 等變動資料放在一起。

if (!file_exists($counterFile)) {
if (!file_exists(dirname($counterFile))) {
mkdir(dirname($counterFile), 0700);
}
exec("echo 0 > $counterFile");
}

這五行主要是檢查 $counterFile 是否存在,若文件不存在則看目錄是否存在,決定要不要建立目錄。之後就建立文件,並寫入 0。

$fp = fopen($counterFile,"rw");
$num = fgets($fp,5);
$num += 1;
print "$num";
echo $counterFile;

這五行就是打開計數器存放的文件,並將它累加後的結果送到瀏覽器端。

exec("rm -rf $counterFile");
exec("echo $num > $counterFile");

最後將計數器文件刪除,再重新建立一個。就完成了這個以文件為基礎的純文字計數器。



整理: 夕垌菪姬 (天地JPLOP)

[ 上一頁 回主目錄 下一頁 ]
版權所有,天地JPLOP、爵堤亞(夕垌菪姬)。網頁背景音樂和各鍊結標題
及鍊結內容和文章小說,版面編排皆歸原權利人所有對本版面
有任何意見或指教,歡迎至論壇指教。