文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Perl源码:在线人数统计CGI程序剖释

Perl源码:在线人数统计CGI程序剖释

时间:2007-04-22  来源:linxh

原文转自: http://www.devfront.com:8080/?q=node/184  

在线人数统计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/>/&gt;/g;
$value =~ s/</&lt;/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;#程序结束。

相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载