用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地址簿


输入信息

     Name: 
    Email Address: Web Address: 
HTML &footer; exit; } 由于篇幅所限,本文只给出了"add"(添加)的程序,另外两个部分" display"(显示)和"se arch"(查询)的程序,感兴趣的读者可以自己试 着写出来。 本文所述的程序在BSDI Unix操作系统下运行,所使用的Web Serv er是Apache。程序中某些写法和设置可能会因操作系统和Web Server 而异