計數器可以用數據庫方式實現,也可以用文本文件方式實現。由于文本文件方式不涉及系統的數據庫管理系統,相對簡單,容易實現,因此,在這里介紹文本方式的計數器。
計數器的原理比較簡單,頁面每次被訪問的時候,對記錄訪問次數的數字加1,然后將這個數顯示出來。原理雖然簡單,在具體實現上還是需要一定的技巧。
由于一個CGI程序在服務器上并非一直駐留在內存中,為了對訪問次數進行計數,則需要把這個數字存入一個文件中,每當主頁被訪問時,打開該文件將訪問數字加1后再存入文件中。
網站是多用戶環境,在訪問文件時必須對文件上鎖以禁止其他用戶對文件的訪問,這樣才能保證數據的可靠性。然而不同網站使用的操作系統不同,其對文件上鎖的機制也不同。本文采用了一種各種平臺都適用的方法,每當有頁面被訪問時,CGI程序創建一個臨時文件,此時若有其它進程也要對文件進行存取則須等待,進程對文件更新后刪除該臨時文件,等待的進程才能對文件進行存取。
下面是用Perl實現的一個計數器源代碼,并加注了注釋:
#!/usr/local/bin/perl
#存貯表示主頁訪問量數字的文件
$data = '/usr/local/etc/httpd/htdocs/counter.data';
#用作文件鎖的臨時文件
$lockfile = '/usr/local/etc/httpd/htdocs/counter.LOCK';
# 主模塊
&increment;
print "Content-Type: text/html\n\n";
print $aclearcase/" target="_blank" >ccesses;
sub increment {
# 檢查臨時文件是否存在
while (-e $lockfile) {
sleep 2; # 存在則等待2秒
}
# 創建臨時文件
open(LOCK," >$lockfile") || die
"Can't create lockfile.\n";
# 讀文件并更新數據
open(DATA,$data) || die "Can't open data file.\n";
$accesses = < DATA >;
$accesses++;
print DATA "$accesses\n";
close(DATA);
# 刪除臨時文件,對數據文件開鎖
close(LOCK);
unlink($lockfile);
}
你可以在頁面上需要顯示計數器的地方加上下面的HTML代碼,頁面被訪問的時候,來訪者就可以知道自己是第幾位來訪者了。
< html > < head >
< title >Home Page< /title >
< /head >
< body >
< h1 >Home Page< /h1 >
< p >歡迎您!第
< !--#exec cgi="/cgi-bin/text-counter.cgi" >
位來訪者.< /p >
< /body > < /html >
只要掌握了計數器的原理,就可以設計出稱心如意的計數器,使你的主頁更有吸引力。