count.cgi
来自「XYZ文本页面计数器票统计系统」· CGI 代码 · 共 133 行
CGI
133 行
#!/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 + =
减小字号Ctrl + -
显示快捷键?