?? count.cgi
字號:
#!/usr/bin/perl
$limit=600; #ip鎖定時間(秒)
$newid=1; #是否允許建立新的ID,不允許則設為0;
$url='count/'; #設置存放記錄的目錄
$filelock=0; #是否需要在讀寫文件時對文件鎖定,一般在UNIX平臺上使用,目前在windows下要設置為0,否則不能正常運行。
$online=1;
######處理環境參數
$buffer=$ENV{'QUERY_STRING'};
@pairs = split(/&/, $buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$A{$name} = $value;}
######處理環境參數
$countrecord="$url$A{'ID'}_count.dat"; #設置計數器文件
$iprecord="$url$A{'ID'}_iprecord.txt"; #設置ip lock記錄文件
#$ip="$url$A{'B'}_ip.txt"; #設置 ip 記錄文件--(備用)
&checkrecord;
###### IP LOCK #######
($sec,$min,$hour,$mday,$mon,$year)=localtime(time);
$mon=$mon+1;
$year=$year+1900;
open(re_count,"$countrecord");
if ($filelock){flock(re_count,1);}
$count=<re_count>;
$sc=<re_count>;
if ($filelock){flock(re_count,8);}
close(re_count);
($day,$today)=split(/,/,$sc);
if(&iplock){
goto dsp;}
###### IP LOCK #####
$count++;
if ($mday-$day==0){
$today++;
}else{
$today=0;}
open(wr_count,">$countrecord");
if ($filelock){flock(wr_count,2);}
print wr_count "$count";
print wr_count "\n"."$mday,$today";
if ($filelock){flock(wr_count,8);}
close(wr_count);
dsp: # display the count.
print"Content-type:text/html\n\n";
if ($A{'SHOW'} eq ""){
print "document.write('訪問人數:<font color=red>'+$count+'</font>|當前在線:<font color=red>'+$online+'</font>人|今日訪問:<font color=red>'+$today+'</font>');"; }
if ($A{'SHOW'} eq 'count'){
print "document.write('訪問人數:<font color=red>'+$count+'</font>');"; }
if ($A{'SHOW'} eq 'online'){
print "document.write('當前在線:<font color=red>'+$online+'</font>人');"; }
if ($A{'SHOW'} eq 'online|count'){
print "document.write('訪問人數:<font color=red>'+$count+'</font>|當前在線:<font color=red>'+$online+'</font>人');"; }
if ($A{'SHOW'} eq 'online|count|today'){
print "document.write('訪問人數:<font color=red>'+$count+'</font>|當前在線:<font color=red>'+$online+'</font>人|今日訪問:<font color=red>'+$today+'</font>');"; }
exit 0;
###### CHECK IP sub #####
sub iplock{
$check=0;
open (FILE,"$iprecord");
if ($filelock){flock(FILE,1);}
@LINES=<FILE>;
if ($filelock){flock(FILE,8);}
close(FILE);
$SIZE=@LINES;
open (FILE,">$iprecord");
if ($filelock){flock(FILE,2);}
for ($i=0;$i<$SIZE;$i++){
$_=$LINES[$i];
($addr,$come_hour,$come_min,$come_sec,$come_time)=split(/,/,$_);
$flag=($hour-$come_hour)*3600+($min-$come_min)*60+($sec-$come_sec);
if( $addr eq "$ENV{'REMOTE_ADDR'}" ){
print FILE "$ENV{'REMOTE_ADDR'},$hour,$min,$sec,$come_time\n";
$check=1;
}
elsif ($flag < $limit && $flag > 0) {
print FILE $_;
$online++;
}
}#end for
if ($check == 0){
print FILE "$ENV{'REMOTE_ADDR'},$hour,$min,$sec,$hour:$min:$sec\n";
if ($filelock){flock(FILE,8);}
close (FILE);
return 0;
}
return 1;
if ($filelock){flock(FILE,8);}
close (FILE);
}
###### check record file ########
sub checkrecord{
if ($newid && ( !(-e $countrecord) ) ){
open (FILE,">$countrecord");
print FILE 0;
print FILE "0,0";
close(FILE);
open (FILE,">$iprecord");
close(FILE);}
}#end sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -