直播中
訪客計數(shù)器是讓 Web 訪客知道該網(wǎng)頁或者網(wǎng)站的人氣指數(shù)最直接的方法。尤其是想利用網(wǎng)頁賺錢的人,訪客人數(shù)是找廣告商最好的說詞。當(dāng)然可以將網(wǎng)站來訪人數(shù)寫成統(tǒng)計報表,但總是感覺直接看到比較真實,到底眼見為憑。
在上圖中,訪客計數(shù)器的流程如下
1.. 第一位使用者瀏覽某頁。
2.. 伺服器程式從資料庫或檔案中讀取該頁被瀏覽次數(shù)。
3.. 將次數(shù)加一儲存,并將它送回第一位使用者。
4.. 第二位使用者瀏覽某頁。
5.. 伺服器程式從資料庫或檔案中讀取該頁被瀏覽次數(shù)。
6.. 將次數(shù)再加一儲存,并將它送回第二位使用者。
PHP 在沒有特殊的訪客計數(shù)器函式,但是我們可以用 PHP 的強大功能自已寫一個訪客計數(shù)器函式。
以下的函式是訪客計數(shù)器的原型,是由 David W. Bettis 所提供,并經(jīng)過作者少許修改。
<html>
<head>
<title>訪客計數(shù)器 原型</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 檔案的內(nèi)容,也就是純文字檔,再將內(nèi)文的數(shù)字存入 $num 變數(shù)中。在 $num 的變數(shù)出現(xiàn)在瀏覽器前,還有經(jīng)過加一的動作,讓使用者可以增加。當(dāng)然,如果想灌水,就在加一動作時加二或者加三,不過自欺是無用的。最后將訪客人數(shù)再回存 /tmp/counter.txt
就一切 OK。
當(dāng)然,每一頁都要這樣寫,豈不麻煩到了極點。這時,我們可以利用 PHP 提供的 require() 功能,將計數(shù)器整理成一個函式,醬子在使用上就方便多多了。
首先要先將 Apache 的設(shè)定檔 (httpd.conf) 加入 PHP include 檔案的路徑。例如要設(shè)所有的 include 檔都在 http://abcdefghijk.com.tw/include 中,可以在httpd.conf 加入下面的例子
php3_include_path .:./include:../include
別忘了重新啟動 Apache 伺服器,新增的 include 路徑才有效。
./apachectl restart
再來就在伺服器的 .../include 目錄中放入以下的檔案,檔名存成
counter.inc
下面就是 MyCounter() 函式。為了讓讀者方便了解,程式中的變數(shù)
$counterFile、$fp 及 $num 保持和 David W. Bettis 所設(shè)定的計數(shù)器中的變數(shù)功能相同。
<?php
file://---------------------------
// 訪客計數(shù)器函式 MyCounter()
// Author: Wilson Peng
// Copyright (C) 1999
file://---------------------------
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
當(dāng)然,要用的話要加 Homepage 中嵌入 MyCounter() 函式,就可以使用了。
<?php
require("counter.inc");
?>
<html>
<head>
<title>訪客計數(shù)器 最終版</title>
</head>
<body>
您是第 <? MyCounter(); ?> 位參觀者
</body>
</html>
Copyright ? 1999, Wilson Peng
要用這個 MyCounter() 函式,先在 Homepage 的開頭處加入 require() 函式,引入 MyCounter() 函式成為該 Homepage 的一部份。之后再將 <? MyCounter(); ?>字串放在需要計數(shù)器的地方就可以了。
function MyCounter() {
:
:
}
在建立函式時,需要用上面的格式。在自訂函式名稱前加入 function 字串。
每頁有用到 MyCounter() 的 Homepage 都會在 /tmp 之后加入該頁的路徑,這可以用 $PHP_SELF 變數(shù)達成。
$counterFile="/tmp".$GLOBALS["PHP_SELF"];
當(dāng)然,若您要將 /tmp 改成別的目錄也可以,不然在 SUN 等伺服器,要是reboot,/tmp 中的東西都沒了,要重新開始再計數(shù)了。若您不知要使用什么目錄,建議使用 /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;
這五行就是打開計數(shù)器存放的檔案,并將它累加后的結(jié)果送到瀏覽器端。
exec("rm -rf $counterFile");
exec("echo $num > $counterFile");
最后將計數(shù)器檔案刪除,再重新建立一個。就完成了這個以檔案為基礎(chǔ)的純文字計數(shù)器。