[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > 源碼天堂 > 正文
Perl源碼:在線人數統計CGI程序剖釋
本文出自:http://gzdzw.51.net 作者: 思維 (2001-08-23 10:00:01)
    在線人數統計CGI程序是很多網站都在使用的程序,此程序並不復雜,在這裡我以逐行解釋的方式來解剖此程序,希望對初學CGI編程的朋友有所幫助。
#!/usr/bin/perl #perl解釋器路徑
$path= "."; #默認當前主機的絕對路徑
$overtime= 3000;#刷新時間, 單位秒,也就是說默認用戶將在您的網站上停留多長時間
$buffer = $ENV{'QUERY_STRING'};#將由瀏覽器端遞交來的參數(表單和包含URL中問號面的參數)賦給變量$buffer。
@pairs = split(/&/, $buffer);
#由遞交來的參數都是用&來分隔的,所以將$buffer以&標志分割賦給數組@pairs。
foreach $pair (@pairs) {
#進入循環
($name, $value) = split(/=/, $pair);
#由在遞交的參數時都是用name=value格式,所以這裡以“=”標志來分割出參數名和參數的值分別賦給變量$name和$value。
############下面一段是對$value進行必要的處理和解碼處理#########
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/\t/--/g;
$value =~ s/>/&gt;/g;
$value =~ s/</&lt;/g;
$FORM{$name} = $value;
#用變量$FORM{$name}來對應$value的值。
}
#結束循環。
##############################################################
$people=1;#將變量變$people(在線人數值)賦值1
($sec,$min,$hour,$mday,$mon,$year,$wan) = localtime(time);#讀系統時間並將秒賦值給變量$sec;將分賦值給變量$min;將時賦值給變量$hour;將日賦值給變量$mday;將月賦值給變量$mon;將年賦值給變量$year;將星期賦值給變量$wan
$mon++;#因為代表月數[0,11],要將$mon加一之才能符合實際情況。
open (FILE,"$path/ip.txt");#以只讀方式打開ip記錄數據文件,此文件是記錄訪客ip地址和訪問時間的數據文件,其記錄格式是:202.163.444.231,21,46,30數據之間用“,”分開以利進行數據分割。
@LINES=<FILE>; #以行方式讀取ip.txt內的數據並賦給數組成@LINE.
close(FILE);#關閉ip.txt文件
open (FILE,">$path/ip.txt");#以寫入方式打開ip.txt文件,注意:用此方式打開時原數據將被清空。
$check=0;#將變量$check賦予0
foreach(@LINES)#進入循環並將數組@LINES內的數據一一指定給$_這個內定變量
{
($addr,$come_hour,$come_min,$come_sec)=split(/,/,$_);
#將變量$_內的信息以“,”號標志進行分割,並將分割的ip地址賦值給變量$addr; 時賦值給變量$come_hour;分賦值給變量$come_min;秒賦值給變量$come_sec.
$flag=($hour-$come_hour)*3600+($min-$come_min)*60+($sec-$come_sec);#將現時的系統時間減記錄中的時間
if ( $addr eq "$ENV{'REMOTE_ADDR'}" )#判斷語句,如果現在訪客返回的ip地址等記錄中的ip地址。
{
print FILE "$ENV{'REMOTE_ADDR'},$hour,$min,$sec\n";
將引號內字符串的值寫入ip.txt文件中。並打出下一個空行,這裡"\n"的意思是打出下一空行。
$check=1;#並將變量$check賦予1值
}
elsif ($flag < $overtime && $flag > 0)
#如果上一個判斷語句不成立(新的ip地址時),則再來一個判斷。如果$flag的值小所設定的刷新時限且$flag大0
{
print FILE $_;
#將當前項的原數據原封不動地重新寫入ip.txt文件
$people++;#在線人數加1。(注意:如果上一條的判斷語句沒被執行,變量$check的值仍為0)
}
}
#循環結束
print FILE "$ENV{'REMOTE_ADDR'},$hour,$min,$sec\n" if ($check == 0);#判斷語句,如果變量$check的值等零,則將此時來訪的ip地址和時間加入到ip.txt中。
close (FILE);#關閉ip.txt.
print "Content-type: text/html\n\n";
# 設定輸出方式為html格式。
print "document.write('當前在線:$people人');\n";#將“當前在線:$people人”這條信息輸出到瀏覽器的對應位置。
exit;#程序結束。

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
Perl源碼:一種圖形顯示式計數器CGI程序范例 (2001-08-23 15:00:00)
Perl源碼:分頁顯示CGI程序范例 (2001-08-23 12:00:01)
Perl源碼:在線人數統計CGI程序剖釋 (2001-08-23 10:00:01)
Perl源碼:日歷CGI程序淺解 (2001-08-23 09:00:01)
 

★  樊強制作 歡迎分享  ★