接下来学习它的语法结构:这里是使用CGI脚本比较普遍的问题:
- 脚本内容只显示不执行.
你正确配置了你的服务器运行CGI脚本? 你的脚本是放置在cgi-bin目录中吗?如果你的服务器允许带.cgi扩展名的CGI运行, 你的脚本文件名的扩展名是这样吗?
- Error 500: Server doesn't support POST.
解答还是如上一条一样,然后你用命令行执行你的CGI,可以正常运行吗?是否有错误?.
- Document contains no data.
确定你的头部行和数据部之间有一空行.
- Error 500: Bad Script Request.
确定你的脚本是可执行的(在UNIX, 用chmod +x 你的脚本.cgi). 在从浏览器运行之前,你应当从命令行运行你的脚本,如果客户端是win95,可以用telnet登陆你的服务器,执行命令行,当然必须了解UNIX命令.
表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 Accept 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_STRING 包含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递交的表单, 标准输入口的字节数. |
当然也有表单上载时可以解码的程序,很少。
[size=+0]uncgi说明原码可以从 http://www.hyperion.com/~koreth/uncgi.html获得。[size=+0]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
在表单输入解码后, 你能读取和处理这个name/value,方法是象下面这样:
print $in{'theName'};这个将显示名字name是theName的值value.如果你有多个用同样名字的name对, cgi-lib.pl用(\0)分隔多个名字. 这样可以正常处理你的脚本.
[size=+0]解码上传的文件输入基于表单的文件上传需要不同的表单输入,有一些程序可以对其进行解码。cgi-lib.pl 后来版本可以很好支持, 在http://www.bio.cam.ac.uk/cgi-lib/ 了解更多的情况.
另一个处理用Perl编写的CGI地址是 http://valine.ncsa.uiuc.edu/cgi_docs.html .
[size=+0]自己做找专门书籍学习吧: ftp://ds.internic.net/rfc/rfc1867.txt.[size=+1]非解剖的脚本头部按照本书阐述,大多数情况可以正常操作,在一些情况下不是这样的,你可以翻阅说明书了解。[size=+1]<ISINDEX> 脚本为了在CGI中完成讨论组, 我们看看叫<ISINDEX>的搜索. 这是早期在浏览器中用来向服务器发出搜索关键字的办法,参看以前的资料。[size=+1]总结CGI脚本, 有时叫服务器端脚本或网关脚本。 在internet上有很多免费资源,你可以搜索下载读懂他们,当然都是英文的,如果你下决心翻译他们(可能更加强理解). 这样一举两得啊.注意:上述程序可以用ultra edit来编辑,注意转换UNIX格式 ,必须采用UNIX格式存盘,再上载,用telnet登陆,在命令行键入perl sample.pl,看有无bug,再 在浏览器中调用。CGI程序包括放置CGI的目录一定要改属性为777, 要写入的HTML文件也要改属性为777.
现在网上有很多免费的cgi,基本可以满足一般需求,请到这个网址查询你要的cgi:http://www.itm.com/cgicollection/