|
计数器原代码 --- 中文注释 |
|
计数器原代码
---------------------------------------------------------------------- #!/usr/bin/perl #以上为perl解释程序在服务器中的目录,如果您的 #目录不同,需作相应改变。 # origin by:ben short # upgrade by:杜经农 # ver 2.01 #程序农场出品 ###################################################################### # ###################################################################### #------------------------------------------------------ #以下部分可以修改以符合您的站点情况 #------------------------------------------------------ #存放记数器数据的文件名,它将放于本perl程序同一目录内 $countname="counts.txt"; #是否记录访问者的IP地址。 (0=no, 1=yes) $logip=1; #服务器中date命令所在的目录 $datepath="/usr/bin/date"; #记录IP地址的文件,它将放于本perl程序同一目录内 $ipname="ipdata.txt"; #记数器图像所在的URL位置 $url="http://dujl.uhome.net/cgi-bin/"; #本记数器将要被放置于其上的站点 $server="dujl.uhome.net"; #以下为数字图像文件的特性值 $digext=".gif"; #gif文件 $digtype="a"; #a系列 $width = "15"; #图像显示的长与宽度 $height = "20"; #######################以下为主程序段,无需修改######################### print "Content-type: text/html\n\n"; open(FILE, $countname); $counter = <FILE>; close(FILE); sub counter { @data=split(":", $counter); $count=@data[0]; $lastip=@data[1]; #以下比较访问者的IP地址与上一次的是否相同,如相同 #则不增加记数。 if ($ENV{'REMOTE_ADDR'} ne $lastip) { $count=$count+1; } else { $count=$count+0; } @nums = split(//, $count); foreach $CountNr (@nums) { $printcount = "<img src=\"$url$CountNr$digtype$digext\" width=\"$width\" height=\"$height\" alt=\"$CountNr\">"; print $printcount; } } sub write_count { open(FILE, ">$countname"); print FILE "$count:$ENV{'REMOTE_ADDR'}"; close(FILE); } sub write_ip { $date=`$datepath`; chomp($date); open(FILE, ">>$ipname"); print FILE "$date $ENV{'REMOTE_ADDR'}\n"; close(FILE); } sub validate { if ($ENV{'HTTP_HOST'} eq "$server") { &counter; &write_count; if ($logip eq "1") { &write_ip; } } else { print "请不要使用别人的记数器"; } } &validate; |