精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>网络专区>>● 网站建设>>盖世神功 — 网站建设技术>>CGI>>怎样学习CGI?(转载)

主题:怎样学习CGI?(转载)
发信人: [email protected]()
整理人: eagle(1999-08-02 12:11:53), 站内信件


                                        CGI脚本入门学习
目 录
        CGI脚本怎样工作的?
        一个简单的例子
        我能用CGI脚本吗?
        你的服务器配置允许CGI脚本吗?
        你能编程吗?
        你应该用什么编程语言?
        你的服务器设置正确吗?
        如果你的服务器不是UNIX系统呢?
        解剖CGI脚本
        输出头部
        输出数据部
        带阐述的脚本
        传递其他信息给脚本
        创建特殊的脚本输出
        以装载另一个文本响应
        无响应
        处理表单的脚本
        表单格式和表单脚本
        GET 和 POST
        URL 编码
        问题: CGI 变量解码程序
        uncgi
        cgi-lib.pl
        解码文件上传的输入
        自己做
        非解剖的头部脚本
        总结
                                        学习CGI脚本 (脚本)
    CGI 意思为 Common Gateway Interface,一种基于浏览器的输入、在Web服
务器上运行的程序方法。 CGI脚本
使你的浏览器与用户能交互,为了在数据库中寻找一个名词,提供你写入的评论
,或者从一个表单中选择几个条目
并且能得到一个明确的回答。如果你曾经遇到过在 web 上填表或进行搜索,你就
是用的CGI脚本。你那时也许没有
意识到,因为大部分工作是在服务器上运行的,你看到的只是结果。
    作为一个网页设计者,你创建客户端的 CGI 脚本,服务器端的程序用来处理
用户输入,结果返回给用户。在这
里你将学习关于 CGI 脚本的一切: 
        CGI脚本是什么?它是怎样工作的
        一个CGI脚本输出象什么?
        怎样用参数或无参数创建一个CGI脚本
        怎样创建一个返回规定响应的CGI脚本
        怎样创建一个输入表单的CGI脚本
        有关在使用CGI脚本中的问题
        你能在脚本中使用的CGI变量
本章节假设在UNIX系统下的。 
                                        CGI脚本是什么?
    CGI 脚本简单地讲是个运行在Web服务器上的程序,有浏览器的输入触发。这
个脚本通常象服务器和系统中其
他程序如数据库的桥梁。 
    CGI 脚本难道不是一个真正的脚本?按照你的服务器的支持,他们可能是一个
编译好的程序或者批命令文件或
者其他可执行的东西。为了简单起见,我们统称他们为脚本scripts。
    CGI 脚本是任何运行在 web 服务器上的程序。CGI意思是Common Gateway I
nterface。  
    CGI 脚本是用下列两种方法使用的:作为一个表单的 ACTION 或作为一个页
中的直接link。
                                        CGI脚本是怎样工作的?
    CGI 脚本有服务器调用,基于浏览器的数据输入。图1 显示在浏览器、服务
器和脚本之间是怎样的一个流程. 
图1. 从浏览器到服务器到脚本到程序 记住再回来噢! 
这有个简短的示意解释: 
   1.一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样在任何地
方出现。 
   2.服务器接收请求,按照那个URL指向的脚本文件(注意文件的位置和扩展名)
,执行脚本. 
   3.脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其
他程序. 
   4.脚本产生某种Web服务器能理解的输出结果. 
   5.服务器接收来自脚本的输出并且把它传回浏览器,让用户了解结果。 
                                     一个简单的例子
这里详细一步一步地解释所有有关发生的细节。 
在图2中有个例图: 
图2. 带有一个脚本连接的页. 

Display Date处是个指向CGI脚本的连接. 它的HTML是这样的: 

Display the Date


说明是个CGI脚本是因为这里面有个cgi-bin的路径. 在许多服务器cgi-bin是仅能
够放置CGI脚本 的目录. 
当你选择这个连接时,你的浏览器将向www.popchina.com服务器提出请求. 服务
器接收这个请求计算出URL处的脚
本文件名然后执行这个脚本. 
这个getdate脚本,在UNIX系统中执行是这样的: 
#!/bin/sh
echo Content-type: text/plain
echo
/bin/date
第一行是个特殊的命令,告诉UNIX系统这是个shell脚本; 真实的情况是从这行开
始的下一行,这个脚本做两件事:
它输出行Content-type: text/plain,接着开始一个空行;第二,它调用UNIX系统
时间date程序,这样输出日期和
时间. 脚本执行后输出应该这样: 
Content-type: text/plain
Tue Oct 25 16:15:57 EDT 1994
这个Content-type是什么东东?它是个特殊的编码,Web服务器用来告诉浏览器输
出这个文本是什么类型的. 这与
HTML中Content-type含义是一样的。 
这样浏览器的输出就如图3. 
图3 date脚本输出结果. 
这是最基本的,实际情况要复杂得多,总之可以用来理解浏览器、服务器和脚本
之间是怎样工作的。 

                                   我能用CGI脚本吗?
在使用CGI脚本前,有两件事要解决:CGI脚本是个高级的Web特性并且需要你和W
eb服务器管理者一样好的知识。 
肯定吗?就是做不到,学学也可以?好吧!让我们继续. 
                             你的服务器配置允许CGI脚本吗?
为了能写和运行CGI脚本,你需要一个Web服务器. 不象通常的HTML文件,你不能
在本地系统上写或试验你的CGI脚
本; 你得通过Web服务器来做这个. 
但是即使你有一个Web服务器,这个服务器必须特别地为运行CGI脚本配置一下. 
那意味着你所有的脚本必须放置在
一个叫做cgi-bin的目录下. 
在编写CGI脚本之前,询问你的服务器管理者是否允许你安装和运行CGI脚本,并
且如果可以的话,他们必须放置在
哪儿?还有,你必须有个真正的Web服务器,如果是FTP或Gopher服务器,那你就
不能用CGI. 
如果你在自己的服务器上运行,你必须特别地创造一个叫cgi-bin的目录,并配置
你的服务器认可这个目录为一个
脚本目录. 也必须记住下面有关CGI脚本特点: 

      每个脚本是个程序,它运行在浏览器可以请求的系统上,执行时使用CPU时
间和内存.
      如果有成打上千的这些脚本同时运行,会怎样?你的系统将不忍负载直至
崩溃。

      如果你不仔细地编写你的CGI脚本,你将有可能让别人通过你的CGI脚本参
数进入伤害
      你的系统.


                                              

                                       你会编程吗?

 初学者注意! 一般地,你必须具备一些基本编程概念与方法。你必须有类似系统
工作的经
              验。如果你没有这些背景,你必须去学习,好了,费话不多说. 


                                 你必须用什么编程语言?

你可以用你熟悉的任何语言编写CGI脚本,只要你的脚本遵守下一节所陈列的规则
即可,只
要那个语言能在你的Web服务器系统上运行. 

 在这本学习手册中,仅用两种语言编写CGI脚本: UNIX shell和 Perl语言. 这个
shell是适
 合在任何相近的UNIX系统上运行并且容易学习,但是处理复杂的情况就困难了.
 Perl,就
 要用这个语言了,它是免费的,这个语言是稳定和强大的,类似C,但它也是较
难学习的. 

                                你的服务器设置正确了吗?

为了运行任何一个CGI脚本,不管简单或复杂的,你的服务器必须设置成能够运行
他们,必
须放置在一个特定的目录,必须有一个依赖你服务器设定的文件扩展名. 

如果你是租用服务器,就要是否允许运行CGI脚本. 

         如果你拥有自己的服务器,检查你的服务器说明书是怎样处理CGI脚本
的. 

                                  如果你用的不是UNIX?

                               只好再找别的学习手册了。 

                                   解剖一个CGI脚本

 如果你编写它很久,克服很多警告和配置,恭喜你,你已经会些CGI脚本,并且
可以在你的
 网页上使用了. 在这一章,将学习脚本是怎样执行,你的服务器又是怎样与他们
对话产生
                                        回应的。  

                                         输出头部

虽然你的CGI脚本可以让你做任何事情,但是脚本的输出还是必须有一个规定形式




这个 "脚本输出" 意思是指你的脚本发回服务器的数据. 在UNIX系统中,输出是
发向标准
输出,服务器从那儿检测它. 在其他系统和服务器,你的脚本输出也许不一样了




这个头部是实际不是文本的一部分,是服务器与浏览器之间的信息协议,你实际
看不到。 

有三个类型的头部: Content-type,Location,和Status. Content-type 最普遍
的。 

有关content-type解释可以见有关HTML的说明,一个你可以发出的特定编码象这
样: 

Content-type: text/html

在这个例子中,输出数据的类型是text/html; 换句话说,他是个HTML文件. 

表1. 通用格式和content-types. 

  

 Format

             Content-Type

 HTML
             text/html
 Text
             text/plain
 GIF
             image/gif
 JPEG
             image/jpeg
 PostScript
             application/postscript
 MPEG
             video/mpeg


 注意content-type 后面必须跟一个空行. 如果你没有空行,服务器将无法搞清
这个头部在
                                       哪里结束。 

                                         输出数据

 你输出的数据应该符合你所规定的content-type; 如果content-type是text/ht
ml,输出安
 置应该是在HTML. 如果content-type是image/gif,输出应该是在一个二进制的
GIF文件. 

                                     练习1: 小试试.

T这是个简单的输出日期的简单脚本,这个CGI脚本还检查看看我是否已经登陆到
我的Web服
务器,并且报告发现了什么(如在图4). 

图4. 脚本的结果 
这是个很简单的例子,他能这样备调用: 

Is Laura Logged in
?


这是没有输入的脚本,它只运行并且返回数据. 

根据前面的阐述,这个脚本内容是这样:: 
#!/bin/sh 
  

echo Content-type: text/html 
  

echo "<HTML><HEAD>" 
  

echo "<TITLE>Is Laura There?</TITLE>" 
  

echo "</HEAD><BODY>" 
为了测试我是否已经登陆系统,用who命令(我的登陆名假设为lemay),储存结果
在变量
ison中. 如果我登陆,变量ison将有些内容,否则则是空的. 

ison='who | grep lemay'

试验结果及返回相应提示的脚本是这样: 

if [ ! -z "$ison" ]; then





        echo "<P>Laura is logged in."</P>





else





        echo "<P>Laura isn't logged in."</P>





fi

最后关闭HTML: 

echo "</BODY></HTML>"

现在你通过从命令行运行他,测试一下,你将得到一个结果说我未登陆你的系统
,当然不
可能的,他的输出是这样的: 

Content-type: text/html





<HTML><HEAD>





<TITLE>Are You There?</TITLE>





</HEAD><BODY>





<P>Laura is not logged in.





</BODY></HTML>

这是输出的一个HTML文本,这样你的浏览器能正常显示他,因为他是个HTML文件
。 

  



现在将他copy到你的服务器的cgi-bin目录下,去执行,如果你不能达到CGI-bin
目录,你
必须询问你的服务器管理者,你不能理所当然地自己建立个CGI-bin目录,那没用
的。 



这个例子完整的脚本如下: 

#!/bin/sh



echo "Content-type: text/html"





echo



echo "<HTML><HEAD>"



echo "<TITLE>Is Laura There?</TITLE>"



echo "</HEAD><BODY>"



ison='who | grep lemay'



if [ ! -z "$ison" ]; then



        echo "<P>Laura is logged in"



else



        echo "<P>Laura isn't logged in"



fi



echo "</BODY></HTML>"

                                              

                                     带有参数的脚本

为了传递一个参数给脚本,可以在URL中使用 (?) 插入脚本名词和参数之间,用
加号(+)
表示每个单一的参数,如: 

<A HREF="/cgi-bin/myscript?arg1+arg2+arg3">run my script

当服务器接收到这个请求,它传递 arg1,arg2,和 arg3 参数给脚本. 你然后能
在脚本中
使用这些参数. 

                   这个方法有时叫查询,因为早期它用在搜索功能中. 

                               练习2: 检查是否有人登陆.

既然你知道怎样使用参数,让我们继续上面的例子pinglaura,通过修改这个例子
我们得到
下面这个脚本pinggeneric. 

我们取个不同题目: 

#!/bin/sh





echo "Content-type: text/html"





echo





echo "<HTML><HEAD>"





echo "<TITLE>Are You There?</TITLE>"





echo "</HEAD><BODY>"

在上面的例子中,下一步应该是测试我是否登陆,在这里我们用参数${1}代替我
的名字
lemay,  ${1}作为第一个参数,${2}作为第二个,${3}作为第三个. 

ison='who | grep "${1}"'





剩下的所有修改如下: 

if [ ! -z "$ison" ]; then





        echo "<P>$1 is logged in"





else





        echo "<P>$1 isn't logged in"





fi

echo "</BODY></HTML>"

好了,让我们修改HTML页中的连接吧!原来是这样: 

Is Laura Logged in?


修改为通用查询功能后是这样,比如查询名字叫john的人是否登陆: 

Is John Logged i
n?


                          在你的服务器上试试,看是否有结果。 

                                   传递其他信息给脚本

有第二种方法传递信息给CGI脚本. 它叫作路径信息path information 用作那些
在脚本调
用是不用变更的参数,象一个临时文件名或调用脚本自己的文件名. 正如你看到
的,在上
面的例子问号后面的参数是因用户表单的输入而改变的. 路径信息Path info用作
其他信息
传递给脚本,实际上,你可以用它作任何事情. 



路径信息Path information是一种不象通常参数脚本那样频繁传递信息的方法. 
路径Path
information通常是指Web服务器上的那些比如配置文件、临时文件或者被脚本因
问题调用
的文件等等此类文件.   



看下面一个路径信息path information例子,: 

http://myhost/cgi-bin/myscript/remaining_path_info?arg1+arg2

当脚本运行时,在路径中的信息将被放置于环境参数PATH_INFO. 你能在你的脚本
内容中使
用这些信息. 

比如说,让我们假设你在多页上已有多个连接到同一个脚本. 你能用这个路径信
息显示那
个有连接的HTML文件名. 这样,在你完成处理你的脚本之后,当你发回一个HTML
文件时,
你能在这个文件里包含一个连接,发回用户一开始那个页。 

           你会在下一章节学到更多路径信息:有用的表单和脚本. 待后来登出
 

                               创建一个特殊的脚本输出

现在你已经学习了诸如输出数据 一般地HTML数据 发给浏览器解释显示的数据. 
但是如果
你不想把脚本结果作为一个数据流形式发回浏览器,而是想把一个存在的页发回
,怎么办?
如果你只是要脚本做一些事而不让任何结果回答给浏览器,怎么办? 

                             不用怕,这里开始解释这些情况. 

                               用调用另一个文本作为响应

CGI输出不是非得一个数据流,有时可以告诉浏览器是存在服务器上的一个页,为
了发出这
个信息,看下面的例子: 

Location: ../docs/final.html

这个Location行用作通常的输出位置,也就是说,如果你用了Location,你就不
必再用象
Content-type这样的数据输出(实际上,你也不能). 正如Content-type,你也必
须在这一
行后面跟一个空行. 

指向这个文件的路径可以是一个URL或相对路径. 所有相对路径是指相对于脚本所
在的位
置. 例子中的final.html文本是在当前上一个目录下docs的目录下: 

echo Location: ../docs/final.html





echo



你不能Content-type 和 Location两个输出同时使用. 比如,如果你想输出一个
标准页,
但是想在这个页尾加上客户的内容,你就得用Content-type自行组建这两个部分
. 注意:
你可以用脚本命令打开一个当地文件作为数据直接将之输出. 



                                              

                                       No Response

有时对于一个CGI脚本也许一点没有输出. 有时你只是要从用户那儿收集点信息.
 你就不用
再调用一个新文本,也不用输出结果或打开一个存在的文件. 在浏览器上的屏幕
还是那个
样子. 

很幸运,这一切很容易. 你只要输出下面这个命令即可(后面跟一个空行): 

echo Status: 204 No Response





echo

这个Status头部提供状态码给服务器(并且也给浏览器). 特别的204将传递给浏览
器,如果
能识别它,它将什么也不做. 

  



尽管无响应是一个官方HTTP规定的一部分,但也并不是适合所有的浏览器,也许
会产生奇
怪的结果,那你要多试验试试看啦. 



                                              

                                    处理表单的脚本

今天,大多数CGI脚本是用来处理表单输入的. 这个过程大致象上面说阐述的一样
,但还是
有些不同,比如CGI脚本只要被调用;数据怎样从服务器被发向浏览器. 

 记住,大多数表单有两个部分: HTML的表单格式;处理表单数据的CGI脚本. 这
个CGI脚本
                               使用标签<FORM>属性调用的. 

                                   表单形式和表单脚本

正如上面所说,由于表单有两个部分. 如下: 

这个ACTION属性包含着处理表单的脚本: 

<FORM ACTION="http://www.popchina.com/cgi-bin/processorscript">

 在这个表单中,每个输入区都有一个NAME的属性,用来称呼表单元素. 当这个表
单数据被
 递交给你在ACTION中定义的CGI脚本,这样这些name和输入内容被作为一个数字
或字符传?BR>                                         莞疟? 

                                       GET 和 POST

表单从浏览器发给服务器有两种方法.  GET 和 POST. 

我们上面谈论的方法,实际是GET,它将数据打包放置在环境变量QUERY_STRING中
作为URL
整体的一部分传递给服务器。 

POST做很多类似GET同样的事情,不同的地方就是它是分离地传递数据给脚本. 你
的脚本通
过标准输入获取这些数据. (有些Web服务器是存储在临时文件中.) 这个QUERY_S
TRING环境
变量将不再设置. 

那你用那个方法呢? POST是个安全的方法,尤其如果你的表单中有很多数据的话
. 当你用
GET,这个服务器就分配变量QUERY_STRING给所有的表单数据,但是这个变量可存
储量是有
限的. 换句话说,如果你有很多数据但是你又用GET,你会丢失很多数据. 

 如果你用POST,你可以尽可能多地使用数据,因为这些数据从来也不分配到一个
变量里. 

                                         URL 编码

URL 编码是一种浏览器用来打包表单输入的格式. 浏览器从表单中获取所有的na
me和其中
的值 ,将他们作为name/value参数编码,移去那些不能传送的字符,将数据排行
等等,这
些还取决于你用GET还是POST?作为URL的一部分或者分离地发给服务器. 不管哪种
情况,在
服务器端的表单输入格式样子象这样: 

theName=Ichabod+Crane&gender=male&status=missing&headless=yes

URL编码遵循下列规则: 


      每对name/value由&符分开.

      每对来自表单的name/value由=符分开. 如果用户没有输入值给这个name,
那么这个
      name还是出现,只是无值(象这样 "name=").

      任何特殊的字符(就是那些不是简单的七位ASCII,如汉字) 将以百分符%用
十六进制
      编码. 当然也包括象 =,&,和 % 这些特殊的字符.

      在输入区中的空格将以加号+显示.


因为表单输入是用这个URL编码传递给你的脚本的,在你用这些参数之前必须解码
,因为解
码是个很普遍的工作,可以有很多工具做这个工作 . 你没有必要自己写这个解码
程序. 

                       这里介绍一个叫uncgi的解码程序,你可以从
 http://www.hyperion.com/~koreth/uncgi.html. 得到原码,安装在你自己的c
gi-bin目录
                                           下. 

                                练习3: 告诉我你的名字.

让我们以这个例子来说明,如图5. 

图5. 告诉我你的名字的表单. 

这个输入被发给脚本,然后发回显示一个hello的信息(间图.6). 

如果你在姓名输入处不输入任何东东,会怎样?见图7. 

图6. 姓名表单的结果. 

                                   图7. 另一个结果. 

                                     修改表单的HTML

现在我们举一个真实的例子: 

<FORM METHOD=POST ACTION="../cgi-bin/form-name">





</FORM>

如果你在用uncgi从input中解码,情况有点不同. 为了是uncgi正常工作,你首先
必须调用
uncgi ,如果uncgi是个目录,加上实际的脚本名,象这样: 

<FORM METHOD=POST ACTION="../cgi-bin/uncgi/form-name">





</FORM>

           这样,你不必修改表单中原始的HTML; 原始的HTML可以工作得很好.
 

                                           脚本

处理表单输入的是个CGI脚本,让我们来仔细地看看。 

在脚本中第一步是解码,在这个例子中,我们已经使用uncgi解码输入数据,实际
这个表单
已经为你做好解码. 通过建立一个uncgi的目录,一旦表单递交给服务器,服务器
会自动进
行解码,这样,所有的name/value已经准备就绪等待你的使用. 

现在,一个例子开始部分假设是下面这样: 

echo Content-type: text/html





echo





echo "<HTML><HEAD>"





echo "<TITLE>Hello</TITLE>"





echo "</HEAD><BODY>"





echo "<P>"

接下来,有两种情况要处理:一件是处理用户不输入名字的情况,一个是如果输
入了向他
们说hello. 

这个Name元素的值,是包含在WWW_theName环境变量中. 用一个简单的测试命令(
-z),你能
查看环境变量是否是空的还是包括相应的输出值: 

if [ ! -z "$WWW_theName" ]; then





    echo "Hello,"





    echo $WWW_theName





else





    echo "You don't have a name?"





fi

最后增加一个连接"go back" . 用来返回: 

echo "</P><P><A HREF="../lemay/name1.html">Go Back</P>"





echo "</BODY></HTML>"

                                               

                                           问题

这里是使用CGI脚本比较普遍的问题: 

你正确配置了你的服务器运行CGI脚本? 你的脚本是放置在cgi-bin目录中吗?如
果你的服
务器允许带.cgi扩展名的CGI运行,你的脚本文件名的扩展名是这样吗? 

解答还是如上一条一样,然后你用命令行执行你的CGI,可以正常运行吗?是否有
错误?. 

确定你的头部行和数据部之间有一空行. 

确定你的脚本是可执行的(在UNIX,用chmod +x 你的脚本.cgi). 在从浏览器运行
之前,你
应当从命令行运行你的脚本,如果客户端是win95,可以用telnet登陆你的服务器
,执行命
令行,当然必须了解UNIX命令.


      脚本内容只显示不执行.

      Error 500: Server doesn't support POST.

      Document contains no data.

      Error 500: Bad Script Request.


                                              

                                         CGI变量

表2 总结那些环境变量. 

表2. CGI 环境变量. 

  

 环境变量         

                     意义

 SERVER_NAME
                     CGI脚本运行时的主机名和IP地址.
 SERVER_SOFTWARE
                     你的服务器的类型如: CERN/3.0 或 NCSA/1.3.
 GATEWAY_INTERFACE
                     运行的CGI版本. 对于UNIX服务器,这是CGI/1.1.
 SERVER_PROTOCOL
                     服务器运行的HTTP协议. 这里当是HTTP/1.0.
 SERVER_PORT
                     服务器运行的TCP口,通常Web服务器是80.
 REQUEST_METHOD
                     POST 或 GET,取决于你的表单是怎样递交的.
 HTTP_ACCEPT 
                     浏览器能直接接收的Content-types,可以有HTTP Accep
t header定
                     义.
 HTTP_USER_AGENT
                     递交表单的浏览器的名称、版本 和其他平台性的附加信
息。
 HTTP_REFERER
                     递交表单的文本的 URL,不是所有的浏览器都发出这个信
息,不要依
                     赖它
 PATH_INFO
                     附加的路径信息,由浏览器通过GET方法发出.
 PATH_TRANSLATED
                     在PATH_INFO中系统规定的路径信息.
 SCRIPT_NAME
                     指向这个CGI脚本的路径,是在URL中显示的(如,
                     /cgi-bin/thescript).
 QUERY_STRING
                     脚本参数或者表单输入项(如果是用GET递交). QUERY_ST
RING 包含
                     URL中问号后面的参数.
 REMOTE_HOST
                     递交脚本的主机名,这个值不能被设置.
 REMOTE_ADDR
                     递交脚本的主机IP地址.
 REMOTE_USER
                     递交脚本的用户名. 如果服务器的authentication被激活
,这个值可
                     以设置。
 REMOTE_IDENT
                     如果Web服务器是在ident (一种确认用户连接你的协议)
运行,递交
                     表单的系统也在运行ident,这个变量就含有ident返回值
.
 CONTENT_TYPE
                     如果表单是用POST递交,这个值将是
                     application/x-www-form-urlencoded. 在上载文件的表
单中,
                     content-type 是个 multipart/form-data.
 CONTENT_LENGTH
                     对于用POST递交的表单,标准输入口的字节数.


                                              

                                 表单输入的解码程序

目前有两个程序: 通用目的的uncgi,和cgi-lib.pl,这是个Perl库,用于perl编
写的CGI
脚本. 

                      当然也有表单上载时可以解码的程序,很少。 

                                          uncgi

         说明原码可以从 http://www.hyperion.com/~koreth/uncgi.html获得
。 

                                       cgi-lib.pl

这是由Steve Brenner编写的,帮助你管理输入. 他能从GET和POST获取输入并且
放置在一
个Perl列表或阵列中. 更新的版本也能处理来自表单的文件上传. 从这儿可以得
到信息与
原码 http://www.bio.cam.ac.uk/cgi-lib. 如果你决定用Perl语言处理你的表单
输入,
cgi-lib是个很好的库. 

为了使用cgi-lib.pl,你通常要这样写: 
#!/usr/lib/perl 

require 'cgi-lib.pl';

cgi-lib中尽管有很多子程序,最重要的是ReadParse子程. ReadParse 读取输入
方便地将
name/value储存在一个Perl阵列中. 在你的Perl脚本中通常是这样调用的: 

&ReadParse(*in);

此例中,阵列名是in,可以随便取名的. 

在表单输入解码后,你能读取和处理这个name/value,方法是象下面这样: 

print $in{'theName'};

这个将显示名字name是theName的值value. 

 如果你有多个用同样名字的name对,cgi-lib.pl用(\0)分隔多个名字. 这样可以
正常处理
                                        你的脚本. 

                                   解码上传的文件输入

基于表单的文件上传需要不同的表单输入,有一些程序可以对其进行解码。 

cgi-lib.pl 后来版本可以很好支持,在http://www.bio.cam.ac.uk/cgi-lib/ 了
解更多的
情况. 

  另一个处理用Perl编写的CGI地址是 http://valine.ncsa.uiuc.edu/cgi_docs
.html . 

                                          自己做

             找专门书籍学习吧: ftp://ds.internic.net/rfc/rfc1867.txt.
 

                                   非解剖的脚本头部

 按照本书阐述,大多数情况可以正常操作,在一些情况下不是这样的,你可以翻
阅说明书
                                          了解。 

                                    <ISINDEX> 脚本

 为了在CGI中完成讨论组,我们看看叫<ISINDEX>的搜索. 这是早期在浏览器中用
来向服务
                      器发出搜索关键字的办法,参看以前的资料。 

                                           总结

CGI脚本,有时叫服务器端脚本或网关脚本。 在internet上有很多免费资源,你
可以搜索
下载读懂他们,当然都是英文的,如果你下决心翻译他们(可能更加强理解). 这
样一举两
得啊. 

注意:上述程序可以用ultra edit来编辑,注意转换UNIX格式 ,必须采用UNIX格
式存盘,
再上载,用telnet登陆,在命令行键入perl sample.pl,看有无bug,再 在浏览器
中调用。
CGI程序包括放置CGI的目录一定要改属性为777,要写入的HTML文件也要改属性为
777. 

现在网上有很多免费的cgi,基本可以满足一般需求,请到这个网址查询你要的
cgi:http://www.itm.com/cgicollection/

--
※ 来源:.网易虚拟社区北京站 http://bj.netease.com.[FROM: 210.74.180.170]

[关闭][返回]