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/>/>/g;
$value =~ s/</</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)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |