我在服务器上配置CGI程序开始用的是perl.exe,执行CGI程序都报:CGI ErrorThe specified CGI application misbehaved by not returning a complete set of HTTP headers.后来改用perlis.dll又提示:'E:\xxx\xxx\xx\ i' script produced no output 请教高手

热心网友

我提供下列关于CGI的设计内容,希望能帮上你的忙……1。 定义:CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。2。 功能:绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。3。 运行环境:CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。4。 CGI处理步骤:⑴通过Internet把用户请求送到服务器。⑵服务器接收用户请求并交给CGI程序处理。⑶CGI程序把处理结果传送给服务器。⑷服务器把结果送回到用户。5。 CGI服务器配置:CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。⑴CREN格式服务器的配置:编辑CREN格式服务器的配置文件通常为/etc/ nf/,在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*。exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如: ⑵NCSA格式服务器的配置在NCSA格式服务器上有两种方法进行设置:①在 nf文件(通常在conf目录下)中加入:Script Alias/cgi-bin/cgi-bin/Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。②在 nf文件加入:Add type application/ i此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。在用上述方法之一设置服务器后,都得重新启动服务器(除非HTTP服务器是用inetd启动的)。6。 CGI的编写语言CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中:· Perl (Practical Extraction and Reporting Language)· Bourne Shed或者Tcl (Tool Command Language)Windows环境中:· C和C++由于Internet上大部分服务器使用的是UNIX操作系统,且几乎任一UNIX操作系统中都有Bourne Shell,因而后面讲述的例子中大部分是用Bourne Shell编写的。7。 CGI环境变量列表SERVER-NAME:运行CGI序为机器名或IP地址。SEUVER-INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。SERVER-PROTOCOL:通信协议,应当是HTTP/1。0。SERVER-PORT:TCP端口,一般说来web端口是80。HTTP-ACCEPT:HTTP定义的浏览器能够接受的数据类型。HTTP-REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量)HTTP-USER-AGENT:发送表单的浏览器的有关信息。GETWAY-INTERFACE:CGI程序的版本,在UNIX下为 CGI/1。1。PATH-TRANSLATED:PATH-INFO中包含的实际路径名。PATH-INFO:浏览器用GET方式发送数据时的附加路径。SCRIPT-NAME:CGI程序的路径名。QUERY-STRING:表单输入的数据,URL中间号后的内容。REMOTE-NOST:发送程序的主机名,不能确定该值。REMOTE-ADDR:发送程序的机器的IP地址。REMOTE-USBR:发送程序的人名。CONTENT-TYPE:POST发送,一般为applioation/xwww-form-urlencoded。CONTENT-LENGTH:POST方法输入的数据的字节数。1。CGI数据传送方法:客户有两种方法:⑴通过环境变量,采用GET方式:…该法简单,但用cethod=get方式通过变量传送数据会因变量接受的数据量有限而产生数据丢失。⑵通过标准输入,采用POST方式──建议使用方式标准输入法是通过method=post方式把数据传送到网关程序的入口。数据在传输中是经过URL编码的,CGI程序在处理前需进行解码,由于此法对数据量没有限制,因而传输中不会产生数据丢失。2。输入数据URL编码URL编码就是浏览器把表单输入的数据传送到服务器时,将输入数据编码、打包。从表单输入的变量及其数值,被编码为“参数名/参数值”,同时把那此不能直接传输的数据转化为16进制。然后根据使用的是GET方法还是POST方法,把它作为URL的一部分或直接送到服务器。3。 CGI程序的特点CGI程序是一种在www服务器上运行的程序,主要用于处理用户通过表单输入的信息,在服务器上产生相应的作用,或把处理结果反馈给浏览器,CGI程序须符合以下两个条件:⑴CGI程序的输出要写标准输出这样,服务器才能解释这一输出,并把它返回到浏览器。⑵CGI程序的数据头要告诉服务器如何处理该程序的输出为了使服务器能够解释CGI程序的输出,CGI程序要有一个特殊的头作为第一个输出行,数据头可以是下列三种之一:①数据类型(Content-type),如:Content-type: text/html② 地址类型(Location),如:Location://www。w3。0rg③状态类型(Status), 如:Status:204 No Respouse4。CGI程序格式CGI程序同下列三部分构成:⑴数据解码部分:由浏览器传送给服务器的通过表单输入的数据都是经过URL编码的,必须进行解码。如果不需要处理表单输入,该部分可省略。⑵数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一:①数据类型(Content-type), 如:Content-type: text/html②地址类型(Location),如:Location:// ③状态类型(Status), 如:Status:204 No Respouse⑶CGI程序主体部分:对通过表单输入的数据进行处理,并输出到标准输出。5。CGI程序的数据类型:若服务器要把数据传送给浏览器,则须在CGI程序中使用表示数据类型的头,它将告诉浏览器如何解释该输入。例1:如服务器要判断回一个HTML文件,则CGI程序中的类型头应定义为:Content-type:text/html例2:如服务器要送回的文件类型是JEPG文件,则CGI程序中的类型头应定义为:Contert-type:image/jpg其余的数据以此类推。6。CGI程序的地址类型若用户想在服务器上打开或加载一个现有的文件,则须在CGI程序中使用表示地址类型的头。表示地址类型的头的值可以是一个URL全地址,也可以是去掉http:和主机名的URL地址。例1:Location: 例2:Location: 例3:Location: Book/ ml7。CGI程序的状态类型如果在传送最后服务器还要送一个特殊的状态码到浏览器,则须在CGI程序中加入表示状态类型的头。状态码由HTTP定义。例:Status: 204 No Response此状态码表示这时浏览器不能从服务器得到任何反馈信息,即服务器上的CGI程序只是对输入进行处理而不作应答,浏览器界面保持不变。8。CGI程序示例下面是一个检索约翰是否登录的例子:#!/bin/sh 数据头部分,声明数据格式echo"Content-type:text/html" 为文本格式echo 此处省略了解码部分echo""echo"约翰登录了吗?"echo""ison='who I grep lemay' 查询登录信自己 ,if[-z"Sison:]; 并向标准输出设备then echo"约翰登录"。 输出查询到的信息。elso echo"约翰未登录"。fiecho""1。 处理表单的CGI程序表单允许用户输入各种信息,而通常CGI程序和带参数的CGI程序不能处理客户的输入或只能处理带硬编码参数的程序。因此出现了专门处理表单的程序。处理表单的CGI程序的编写须注意那些与表单有关的因素。编写一般步骤为:⑴由于表单传给CGI程序的数据是经URL编码的,因而编写前需调用cgiparse、uncgi或 程序对输入进行解码。⑵输出标准数据类型标题,地址类型标题或状态类型标题,这些标题后要以两个\n(换行)字符结尾。第一个\n表示换行,第二个\n表示标题后面的空行。⑶输出对应版面开头部分的HTML程序。2。URL编码规则URL编码就是由浏览器把通过表单输入的数据──变量/变量值转化为参数/参数值,同时把那些不能直接传输的符号,如:&,%,+转化为16进制。编码规则:参数/参数值对之间用“&”分隔,空格用“+”代替参数与参数值之间用“=”分隔,如果参数未赋值,参数也同样出现在编码中,如:“姓名=”。一些特殊符号:&,%,+转化为带%的16进制数:%NN。例:URL编码:姓名:张三 & 性别:男 & 民族:汉3。URL编码的解码可以根据编码规则和环境变量,自己编写解码程序,也可直接使用现成的解码程序。⑴使用解码程序cgiparse制作CGI:cgiparse:这是处理GET方式和POST方式的很有用的程序,是CERN格式服务器程序的一部分,如果服务器为其它格式,请选用其它解码程序。使用CGIPARSE程序时,需根据不同的表单式输入采取相应的参数在CGI程序的开头调用CGIPARSE程序。若使用GET命令发送表单输入,则cgiparse程序使用form选项将参数名/参数值对进行解码并存入与变量同名的Shell环境变量中,只是在名字前面加上form_前缀,即若变量原来为mybook,cgiparse产生的环境变量为FORM_mybook。在Bourne shell中程序调用cgiparse处理GET输入格式为eval/home/www/cgi-bin/cgiparse-form,若使用POST命令地送表单输入,可以有几种途径处理输入。其中最简单的方法是,使用_init选项,从标准输入读入输入量,并把它存入环境变量QUERY_STRING中,然后选择_form选项调用cgiparse对参数名/参数值对进行解码,并存入环境变量中。因此在Shell程序中调用cgiparse处理POST输入需两行命令:eval/home/www/cgi-bin/cgiparse-initeval/home/www/cgi-bin/cgiparse-form例:#!/bin/sheval/home/www/cgi-bin/cgiparse-init --- 第一部分:|--码,采用eval/home/www/cgi-bin/cgiparse-form --- cgiparse的POST方式echo"Conetnt-type:text/html" --- 程序第二部分:|-- 数据头,echo --- 数据类型为文本格式html文档,注意应有一空行echo"" --------echo"Sleepometer Results |" |echo"Results: |if [!-z "$FORM_the Name"]; 程序主体部分:then echo"$FORM_the Name is" 处理表单输入else echo"A Person with no name is" 注意输入数据fi 的格式if["$FORM_sheepy"="yes"]; |then echo"sleepy" |else echo"Not sleepy" |fi echo" --------⑵使用uncgi解码程序设计CGI程序uncgi:用C语言写成,处理方式与cgiparse类似,但比cgiparse易得到并能更好地处理POST方式的输入,可从: / ml/得到有关信息。uncgi最好安装在目录cgi-bin中,编译前应修改Makefile文件,使其中的目录路径和你使用的系统一致。uncgi程序从用GET或POST方式输入数据中的表单中读入输入并解码,然后产生一组变量,这些变量都加上了www_前缀,如:原来的特征变量为 the work和playing,现在则对应为 www_the work和www_playing,对于多个参数名/参数值对使用相同名字时,只产生一个环境变量,每个变量值用#符号分开,如:参数名/参数值对为playing=baskeball, playing=baseball,则环境变量FORM_PLAYING的值为baskeball#baseball。使用uncgi程序时,需对FORM标注中的ACTION特征量作一点修改,不能在ACT\ON中直接调用,必须附上程序名,如:需改为例:#!/bin/shcgi程序的数据头部分:echo"Content=type:text/html" --- 使用uncgi|-- 解码程序时,echo --- 不需要解码部分,调用cgi时,自动调用uncgi进行解码。echo"" ---------echo"Sleeppometer Results |" |echo"" |echo"Results:" |if [!-z"$www_the Name"]; cgi程序主体部分: then echo"$www_the Name is" 其中对两个表单变量else echo"A person with no the Name和sleepy name is" 进行了处理fi | if ["$www_sleepu"="yes"]; |then echo"sleepy。" |else echo"Not sleepy。" |fi |echo"" ---------⑶使用 解码设计CGI程序 用perl语言编写,它从GET或POST读入表格是输入并存放在数组中。可从 软件包,是由Steve Brener用perl编写的,它可以从用GET或POST方式输入的表单中读入表单式输入,并存放在一个perl表或相应的数组中,用户可以从地址 用户若要使用cgi-lib,则可以从上述URL中取出源程序,并把它放在用户的perl目录中,且在用户程序中用命令veguire' '把库目录中的程序包含进程序中。 包含好几个管理表单的程序,Read Parse是 软件包中最重要的一个表单管理软件。它能从用GET或POST输入的表单中读入输入值,并把输入值以参数名/参数值对的形式放入相应的perl数组中。Read Parse命令的调用格式为:& Read Parse(*数组名)对于多个参数名/参数值使用相同的名字时, 会将数组中的值用\0空字符)分开。例:#!/user/local/bin/perlcgi程序的第一部分:require‘ ’; --- 调用 软件包|---中的Read Parse&lead Parse(*in); --- 程序进行解码,结果放在数组in中cgi程序的数据头部分:print"Content_type:text/html\n\n"; ---说明数据是文本格式的html文档’,“\n\n”表示打印一个空行print“”; --------print“Sleeppometer Results |” ; |print“”; |print“Results:”; cgi程序 if [$in{‘the Name’}] 的主体部分: [ print“$in{the Name}is”;] 注意对表单输 else{print“A Person with no 入变量的处理,name is”;} 变量存放在数if [$in{‘sleepy’}eq yes] 组in中 {print“sleepy。”} |else{print“not sleepy。”;} |print“”; --------4。 带参数的CGI程序使CGI程序通用化是非常重要的,从前面检查登录CGI的程序可知,若要检查不同人的登录情况,则需编写同样的CGI程序,但对于同样的情况,只需编写一个带参娄的CGI程序,如:只需将示例程序中的Ison:‘who I grep约翰’语句改为ison:‘who I grep“$第几个变量”’即可。把参数赋给CGI程序,用如下方法连接:”clink hear。连接中问号后的 g3为将传给cgi-bin/myscript的参数,它们用“+”分开。下面举一个检查珍妮是否登录的例子:#!/bin/shecho“Covtent_type:text/html”echoecho“”echo“你登录了吗?”echo“”ison=“who I grep‘$2’”if[-z“$ ison”];the echo“珍妮已登录。”else echo“珍妮未登录。”fiecho“”用户只需通过珍妮登录了吗?即可在浏览器中显示珍妮是否登录的界面。5。 NPH(无处理头)程序NPH(non-processed headers)程序即非解释文件头程序,是为了加快服务器往浏览器传文件的速度,编写这种程序须按照以下格式:⑴程序中需有一个nph前缀,如nph_pinglanra。⑵程序除了原有的数据类型头、地址头及状态头外,还需加入HTTPD头。HTTPD头分为两部分:① HTTP/1。0加上状态码,如:HTTP/1。0 2000k状态码200,表示“一切正常,数据已送走。”② 服务器头,它能显示出运行的服务器的版本号,如:Server: NCSA/1。3Server: CERN/3。0 PRE6。

热心网友

我提供下列关于CGI的设计内容,希望能帮上你的忙……1。 定义:CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。2。 功能:绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。3。 运行环境:CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。4。 CGI处理步骤:⑴通过Internet把用户请求送到服务器。⑵服务器接收用户请求并交给CGI程序处理。⑶CGI程序把处理结果传送给服务器。⑷服务器把结果送回到用户。5。 CGI服务器配置:CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。⑴CREN格式服务器的配置:编辑CREN格式服务器的配置文件通常为/etc/ nf/,在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*。exec。命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如: ⑵NCSA格式服务器的配置在NCSA格式服务器上有两种方法进行设置:①在 nf文件(通常在conf目录下)中加入:Script Alias/cgi-bin/cgi-bin/Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。②在 nf文件加入:Add type application/ i此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。在用上述方法之一设置服务器后,都得重新启动服务器(除非HTTP服务器是用inetd启动的)。6。 CGI的编写语言CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中:· Perl (Practical Extraction and Reporting Language)· Bourne Shed或者Tcl (Tool Command Language)Windows环境中:· C和C++由于Internet上大部分服务器使用的是UNIX操作系统,且几乎任一UNIX操作系统中都有Bourne Shell,因而后面讲述的例子中大部分是用Bourne Shell编写的。7。 CGI环境变量列表SERVER-NAME:运行CGI序为机器名或IP地址。SEUVER-INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。SERVER-PROTOCOL:通信协议,应当是HTTP/1。0。SERVER-PORT:TCP端口,一般说来web端口是80。HTTP-ACCEPT:HTTP定义的浏览器能够接受的数据类型。HTTP-REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量)HTTP-USER-AGENT:发送表单的浏览器的有关信息。GETWAY-INTERFACE:CGI程序的版本,在UNIX下为 CGI/1。1。PATH-TRANSLATED:PATH-INFO中包含的实际路径名。PATH-INFO:浏览器用GET方式发送数据时的附加路径。SCRIPT-NAME:CGI程序的路径名。QUERY-STRING:表单输入的数据,URL中间号后的内容。REMOTE-NOST:发送程序的主机名,不能确定该值。REMOTE-ADDR:发送程序的机器的IP地址。REMOTE-USBR:发送程序的人名。CONTENT-TYPE:POST发送,一般为applioation/xwww-form-urlencoded。CONTENT-LENGTH:POST方法输入的数据的字节数。1。CGI数据传送方法:客户有两种方法:⑴通过环境变量,采用GET方式:…该法简单,但用cethod=get方式通过变量传送数据会因变量接受的数据量有限而产生数据丢失。⑵通过标准输入,采用POST方式──建议使用方式标准输入法是通过method=post方式把数据传送到网关程序的入口。数据在传输中是经过URL编码的,CGI程序在处理前需进行解码,由于此法对数据量没有限制,因而传输中不会产生数据丢失。2。输入数据URL编码URL编码就是浏览器把表单输入的数据传送到服务器时,将输入数据编码、打包。从表单输入的变量及其数值,被编码为“参数名/参数值”,同时把那此不能直接传输的数据转化为16进制。然后根据使用的是GET方法还是POST方法,把它作为URL的一部分或直接送到服务器。3。 CGI程序的特点CGI程序是一种在www服务器上运行的程序,主要用于处理用户通过表单输入的信息,在服务器上产生相应的作用,或把处理结果反馈给浏览器,CGI程序须符合以下两个条件:⑴CGI程序的输出要写标准输出这样,服务器才能解释这一输出,并把它返回到浏览器。⑵CGI程序的数据头要告诉服务器如何处理该程序的输出为了使服务器能够解释CGI程序的输出,CGI程序要有一个特殊的头作为第一个输出行,数据头可以是下列三种之一:①数据类型(Content-type),如:Content-type: text/html② 地址类型(Location),如:Location://www。w3。0rg③状态类型(Status), 如:Status:204 No Respouse4。CGI程序格式CGI程序同下列三部分构成:⑴数据解码部分:由浏览器传送给服务器的通过表单输入的数据都是经过URL编码的,必须进行解码。如果不需要处理表单输入,该部分可省略。⑵数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一:①数据类型(Content-type), 如:Content-type: text/html②地址类型(Location),如:Location:// ③状态类型(Status), 如:Status:204 No Respouse⑶CGI程序主体部分:对通过表单输入的数据进行处理,并输出到标准输出。5。CGI程序的数据类型:若服务器要把数据传送给浏览器,则须在CGI程序中使用表示数据类型的头,它将告诉浏览器如何解释该输入。例1:如服务器要判断回一个HTML文件,则CGI程序中的类型头应定义为:Content-type:text/html例2:如服务器要送回的文件类型是JEPG文件,则CGI程序中的类型头应定义为:Contert-type:image/jpg其余的数据以此类推。6。CGI程序的地址类型若用户想在服务器上打开或加载一个现有的文件,则须在CGI程序中使用表示地址类型的头。表示地址类型的头的值可以是一个URL全地址,也可以是去掉http:和主机名的URL地址。例1:Location: 例2:Location: 例3:Location: Book/ ml7。CGI程序的状态类型如果在传送最后服务器还要送一个特殊的状态码到浏览器,则须在CGI程序中加入表示状态类型的头。状态码由HTTP定义。例:Status: 204 No Response此状态码表示这时浏览器不能从服务器得到任何反馈信息,即服务器上的CGI程序只是对输入进行处理而不作应答,浏览器界面保持不变。8。CGI程序示例下面是一个检索约翰是否登录的例子:#!/bin/sh 数据头部分,声明数据格式echo"Content-type:text/html" 为文本格式echo 此处省略了解码部分echo""echo"约翰登录了吗?"echo""ison='who I grep lemay' 查询登录信自己 ,if[-z"Sison:]; 并向标准输出设备then echo"约翰登录"。 输出查询到的信息。elso echo"约翰未登录"。fiecho""1。 处理表单的CGI程序表单允许用户输入各种信息,而通常CGI程序和带参数的CGI程序不能处理客户的输入或只能处理带硬编码参数的程序。因此出现了专门处理表单的程序。处理表单的CGI程序的编写须注意那些与表单有关的因素。编写一般步骤为:⑴由于表单传给CGI程序的数据是经URL编码的,因而编写前需调用cgiparse、uncgi或 程序对输入进行解码。⑵输出标准数据类型标题,地址类型标题或状态类型标题,这些标题后要以两个\n(换行)字符结尾。第一个\n表示换行,第二个\n表示标题后面的空行。⑶输出对应版面开头部分的HTML程序。2。URL编码规则URL编码就是由浏览器把通过表单输入的数据──变量/变量值转化为参数/参数值,同时把那些不能直接传输的符号,如:&,%,+转化为16进制。编码规则:参数/参数值对之间用“&”分隔,空格用“+”代替参数与参数值之间用“=”分隔,如果参数未赋值,参数也同样出现在编码中,如:“姓名=”。一些特殊符号:&,%,+转化为带%的16进制数:%NN。例:URL编码:姓名:张三 & 性别:男 & 民族:汉3。URL编码的解码可以根据编码规则和环境变量,自己编写解码程序,也可直接使用现成的解码程序。⑴使用解码程序cgiparse制作CGI:cgiparse:这是处理GET方式和POST方式的很有用的程序,是CERN格式服务器程序的一部分,如果服务器为其它格式,请选用其它解码程序。使用CGIPARSE程序时,需根据不同的表单式输入采取相应的参数在CGI程序的开头调用CGIPARSE程序。若使用GET命令发送表单输入,则cgiparse程序使用form选项将参数名/参数值对进行解码并存入与变量同名的Shell环境变量中,只是在名字前面加上form_前缀,即若变量原来为mybook,cgiparse产生的环境变量为FORM_mybook。在Bourne shell中程序调用cgiparse处理GET输入格式为eval/home/www/cgi-bin/cgiparse-form,若使用POST命令地送表单输入,可以有几种途径处理输入。其中最简单的方法是,使用_init选项,从标准输入读入输入量,并把它存入环境变量QUERY_STRING中,然后选择_form选项调用cgiparse对参数名/参数值对进行解码,并存入环境变量中。因此在Shell程序中调用cgiparse处理POST输入需两行命令:eval/home/www/cgi-bin/cgiparse-initeval/home/www/cgi-bin/cgiparse-form例:#!/bin/sheval/home/www/cgi-bin/cgiparse-init --- 第一部分:|--码,采用eval/home/www/cgi-bin/cgiparse-form --- cgiparse的POST方式echo"Conetnt-type:text/html" --- 程序第二部分:|-- 数据头,echo --- 数据类型为文本格式html文档,注意应有一空行echo"" --------echo"Sleepometer Results |" |echo"Results: |if [!-z "$FORM_the Name"]; 程序主体部分:then echo"$FORM_the Name is" 处理表单输入else echo"A Person with no name is" 注意输入数据fi 的格式if["$FORM_sheepy"="yes"]; |then echo"sleepy" |else echo"Not sleepy" |fi echo" --------⑵使用uncgi解码程序设计CGI程序uncgi:用C语言写成,处理方式与cgiparse类似,但比cgiparse易得到并能更好地处理POST方式的输入,可从: / ml/得到有关信息。uncgi最好安装在目录cgi-bin中,编译前应修改Makefile文件,使其中的目录路径和你使用的系统一致。uncgi程序从用GET或POST方式输入数据中的表单中读入输入并解码,然后产生一组变量,这些变量都加上了www_前缀,如:原来的特征变量为 the work和playing,现在则对应为 www_the work和www_playing,对于多个参数名/参数值对使用相同名字时,只产生一个环境变量,每个变量值用#符号分开,如:参数名/参数值对为playing=baskeball, playing=baseball,则环境变量FORM_PLAYING的值为baskeball#baseball。使用uncgi程序时,需对FORM标注中的ACTION特征量作一点修改,不能在ACT\ON中直接调用,必须附上程序名,如:需改为例:#!/bin/shcgi程序的数据头部分:echo"Content=type:text/html" --- 使用uncgi|-- 解码程序时,echo --- 不需要解码部分,调用cgi时,自动调用uncgi进行解码。echo"" ---------echo"Sleeppometer Results |" |echo"" |echo"Results:" |if [!-z"$www_the Name"]; cgi程序主体部分: then echo"$www_the Name is" 其中对两个表单变量else echo"A person with no the Name和sleepy name is" 进行了处理fi | if ["$www_sleepu"="yes"]; |then echo"sleepy。" |else echo"Not sleepy。" |fi |echo"" ---------⑶使用 解码设计CGI程序 用perl语言编写,它从GET或POST读入表格是输入并存放在数组中。可从 软件包,是由Steve Brener用perl编写的,它可以从用GET或POST方式输入的表单中读入表单式输入,并存放在一个perl表或相应的数组中,用户可以从地址 用户若要使用cgi-lib,则可以从上述URL中取出源程序,并把它放在用户的perl目录中,且在用户程序中用命令veguire' '把库目录中的程序包含进程序中。 包含好几个管理表单的程序,Read Parse是 软件包中最重要的一个表单管理软件。它能从用GET或POST输入的表单中读入输入值,并把输入值以参数名/参数值对的形式放入相应的perl数组中。Read Parse命令的调用格式为:& Read Parse(*数组名)对于多个参数名/参数值使用相同的名字时, 会将数组中的值用\0空字符)分开。例:#!/user/local/bin/perlcgi程序的第一部分:require‘ ’; --- 调用 软件包|---中的Read Parse&lead Parse(*in); --- 程序进行解码,结果放在数组in中cgi程序的数据头部分:print"Content_type:text/html\n\n"; ---说明数据是文本格式的html文档’,“\n\n”表示打印一个空行print“”; --------print“Sleeppometer Results |” ; |print“”; |print“Results:”; cgi程序 if [$in{‘the Name’}] 的主体部分: [ print“$in{the Name}is”;] 注意对表单输 else{print“A Person with no 入变量的处理,name is”;} 变量存放在数if [$in{‘sleepy’}eq yes] 组in中 {print“sleepy。”} |else{print“not sleepy。”;} |print“”; --------4。 带参数的CGI程序使CGI程序通用化是非常重要的,从前面检查登录CGI的程序可知,若要检查不同人的登录情况,则需编写同样的CGI程序,但对于同样的情况,只需编写一个带参娄的CGI程序,如:只需将示例程序中的Ison:‘who I grep约翰’语句改为ison:‘who I grep“$第几个变量”’即可。把参数赋给CGI程序,用如下方法连接:”clink hear。连接中问号后的 g3为将传给cgi-bin/myscript的参数,它们用“+”分开。下面举一个检查珍妮是否登录的例子:#!/bin/shecho“Covtent_type:text/html”echoecho“”echo“你登录了吗?”echo“”ison=“who I grep‘$2’”if[-z“$ ison”];the echo“珍妮已登录。”else echo“珍妮未登录。”fiecho“”用户只需通过珍妮登录了吗?即可在浏览器中显示珍妮是否登录的界面。5。 NPH(无处理头)程序NPH(non-processed headers)程序即非解释文件头程序,是为了加快服务器往浏览器传文件的速度,编写这种程序须按照以下格式:⑴程序中需有一个nph前缀,如nph_pinglanra。⑵程序除了原有的数据类型头、地址头及状态头外,还需加入HTTPD头。HTTPD头分为两部分:① HTTP/1。0加上状态码,如:HTTP/1。0 2000k状态码200,表示“一切正常,数据已送走。”② 服务器头,它能显示出运行的服务器的版本号,如:Server: NCSA/1。3Server: CERN/3。0 PRE6。