现在,大部分网友在WWW上都建立了自己的家,而“主页计数器”和“访客留言板”等自然是每个主页不可缺少的。这些功能都是通过CGI(Common Gateway Interface 通用网关接口)技术来实现的,CGI不同于其它动态网页技术,它为网页提供交互性和可操作性,可以根据客户端的输入和状态来控制输出的内容。而现在很多网友主页上使用的CGI都是申请免费主页时搭配的公用CGI,你难道不想拥有一个由自己编写,充满个性的CGI吗?
其实,要想拥有只属于自己的CGI并非难事。首先,需要申请一个开放CGI权限的免费主页。一般免费主页并不允许使用自己的CGI,本报曾经介绍过的“太阳城”(linux.cqi.com.cn)和“湖南网虫之家”(home.hn.cinfo.net)都提供这项服务,其它可能还有一些,你可以自己搜索一下。
接下来,我们就要编写自己的CGI程序。现在一般使用perl作为编写CGI程序的语言,它是一种unix平台下的解释型语言,你可以在http://www.activestate.com/pw32/下载它的for win95的版本,这样我们就可以在win95上调试perl CGI程序了。
我个人认为perl的特性类似basic,而具体操作又集各家之长(有一部分像C),有编程经验的人很容易接受并在较短时间内熟练使用。另外,你可以在网上下载许多perlCGI的源程序,十分方便我们学习和使用,有时你只需将源程序稍加改动,就能成为自己想要的CGI。再加上perl强大的功能,我们很快就能编写出一个简单的CGI。
以下count.cgi就是一个用perl编写的字符型的主页计数器。
count.cgi
#!/usr/bin/perl
print “content-type:text/html
";#指出本CGI输出格式为文本/超文本
open(COUNT,“+ #打开计数文件count.dat,文件名前加符号+<表示打开模式为可读写,
#COUNT为文件句柄
flock(COUNT,2)||die(“Can''t flock file: $!");
#将文件设为独占,禁止其它进程访问
$count=;#读取文件内容
$count++;#将变量内容加1
seek(COUNT,0,0)||die(“Can''t rewind file: $!");#将文件指针指向文件头
print COUNT “$count";#写回增加后的数据
truncate(COUNT, tell(COUNT))||die(“Can''t truncate file: $!");
#删除计数文件后面可能出现的多余数据
close(COUNT)||die(“Can''t close file: $!");#关闭文件
print “$count";#输出计数
程序以#表示注释,其中第一行“#!/usr/bin/perl”指出perl解释器的所在位置,在unix中是必需的,unix将以这个解释器解释运行CGI。第二行的输出描述了本CGI的输出格式,除text/html以外,还有text/plain和image/gif等格式,其末尾要求输出两个回车(
)。die函数的作用就是输出错误提示并终止程序运行。我们以count.dat文件来记录我们主页的计数。由于unix是多进程操作系统,可能同时还有其他人在访问你的主页,两个进程同时访问文件会造成混乱,所以一定要将文件锁定,直至读写完毕。Perl以$加变量名表示一般变量(整型、浮点、字符型、字符串等),它的类型是自动的,且在使用前不用申请。每个die函数中都有一个$!符号,这是一个特殊变量,其内保存着最近一次产生的错误信息。最后以print输出计数。
最后,我们来安装我们的CGI。将本文件通过FTP传输到你的主页子目录下,并通过FTP指令改变其属性,具体命令是“chmod 755 count.cgi”。同时,用FTP在同目录建立内容为“0”(注意:后面不要加回车)的文件count.dat作为计数初值。在你的主页中加入“你是自xx年xx月以来第
位访问者”,然后上载主页。最后要注意的就是,unix大小写敏感,也就是说一定要注意大小写,以免出错。另外,这个CGI需要服务器支持SSI(Server Side Include),否则无法运行。好,一切OK,打开浏览器,敲入自己主页的地址,看着数字一次次地增长,是不是很有成就感?这是一个从头到脚完全属于你的主页。其实只要在超文本中对字体和颜色稍加装饰,这个计数器还是很漂亮的呢.