用Perl语言编写CGI程序一例
编程技巧
北京理工大学计算机科学工程系 余波公
共网关界面CGI(Common Gateway Interface)是Internet上常用
的动态技术之一,利用C GI程序,用户、服务器和外部数据库之间就能
进行简单的交互通讯。比如,CGI程序允许WWW客户端的浏览器发送简
单的信息给服务器,服务器接到信息并处理之后,可以发送动态文本回
浏览器并显示。
一般的CGI可以应用在以下几个方面:
1.通过一个HTML表格,收集有关自己的WWW站点内容的访问者反馈
。
2.在进行WEB查询时,动态进行系统文件的转换。
3.对Archie或WAIS数据库进行查询,并返回HTML文件格式的结果
。
CGI的标准是由HTTP的主要作者George Phillips、Tony Sander
Ari Luotonenen和Joh n Franks制定出来的。
用很多种语言都能写出CGI程序,如Perl、C、TCL、BASIC和Java,
但是Perl是最适合的。Perl是一种解释语言,在1980年由Larry Wall
发明出来,专门用于大量的字串、文字和文件的处理,因此提供了清楚
而简明的方法来解决CGI程序中经常发生的问题。
本文通过一个实例介绍如何用Perl语言进行CGI编程。这是一个I
nternet地址簿,格式如下图所示。访问的用户可以在表格中填写姓名
、E-mail地址、WEB地址等情况,按下Add toA ddressbook键之后,CGI程序会将它加入到一个地址簿中
。用户也可以按下Display键查看所有的记录,还可以输入关键词并按
下Start Search键进行查询。图1
这个实例包括三个文件:浏览器前端的HTML文件Addbook.htm、CG
I程序的源文件Addboo k.pl、存储输入数据的文本文件Addbook.txt
。
以下Perl源程序的代码,名为Addbook.pl:
#! /usr/bin/perl
# 以上是perl编译器所在目录。
# Addbook.txt所在的绝对路径,例如: http://209.24.16.160/h
tmlfile/ricky/AddBo ok.txt, 该文件在Web Server 上必须可写。
$ AddBook ="http://209.24.16.160/htmlfile/ricky/AddBook.
txt ";
# 输出的WEB页面的顶部。可按个人爱好进行编辑。
sub header {
print <<"HTML";
Internet AddBook
HTML
}
# WEB页面的底部。也可按个人要求进行编辑。
sub footer {
print <<"HTML";
HTML
}
# 此部分如非专家请不要轻易修改。
if ($ENV{‘REQUEST_METHOD'} eq ‘POST')
{
read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH'});
@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;
$value =~ tr/,//;
$contents{$name} = $value;
}
}
print "Contenttype: text/html\n\n";
if ($contents{‘act'} eq "add") {
&no_name unless $contents{‘name'};
open(BOOK, ">>$AddBook") || &no_open;
print BOOK "$contents{‘name'},$contents{‘email'},$cont
ents{‘url'}\n";
close(BOOK);
&header;
print <<"HTML";
信息已被成功输入
你的信息已经被成功地加入到我们的INTERNET地址簿中
[Return to the Ad
dBook]
HTML
&footer;
exit;
}
if ($contents{‘act'} eq "display") {
……
}
if ($contents{‘act'} eq "search") {
......
}
sub no_open {
&header;
print <<"HTML";
错误!不能打开数据库!
[Return to the Ad
dBook]
HTML
&footer;
exit;
}
sub no_name {
&header;
print <<"HTML";
请将姓名填入
对不起,姓名是必须填入的.
你的INTERNET地址簿
输入信息
HTML
&footer;
exit;
}
由于篇幅所限,本文只给出了"add"(添加)的程序,另外两个部分"
display"(显示)和"se arch"(查询)的程序,感兴趣的读者可以自己试
着写出来。
本文所述的程序在BSDI Unix操作系统下运行,所使用的Web Serv
er是Apache。程序中某些写法和设置可能会因操作系统和Web Server
而异