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 + -
显示快捷键?