范文资料网>反思报告>脚本>《CGI脚本入门学习

CGI脚本入门学习

时间:2022-03-23 14:36:33 脚本 我要投稿
  • 相关推荐

CGI脚本入门学习

cgi 意思为 common gateway interf-ace, 一种基于浏览器的输入、在web服务器上运行的程序方法. cgi脚本 使你的浏览器与用户能交互,为了在数据库中寻找一个名词, 提供你写入的评论,或者从一个表单中选择几个条目并且能得到一个明确的回答. 如果你曾经遇到过在web上填表或进行搜索, 你就是用的cgi脚本. 你那时也许没有意识到,因为大部分工作是在服务器上运行的,你看到的只是结果.

CGI脚本入门学习

作为一个网页设计者, 你创建客户端的 cgi脚本, 服务器端的程序用来处理用户输入, 结果返回给用户.

在这里你将学习关于cgi脚本的一切:

cgi脚本是什么?它是怎样工作的

一个cgi脚本输出象什么?

怎样用参数或无参数创建一个cgi脚本

怎样创建一个返回规定响应的cgi脚本

怎样创建一个输入表单的cgi脚本

有关在使用cgi脚本中的问题

你能在脚本中使用的cgi变量


本章节假设在unix系统下的。


说明是个cgi脚本是因为这里面有个cgi-bin的路径. 在许多服务器cgi-bin是仅能够放置cgi脚本 的目录.

当你选择这个连接时, 你的浏览器将向http://www.ahsrst.cn服务器提出请求. 服务器接收这个请求计算出url处的脚本文件名然后执行这个脚本.

这个getdate脚本, 在unix系统中执行是这样的:

#!/bin/shecho content-type: text/plainecho/bin/date

第一行是个特殊的命令,告诉unix系统这是个shell脚本; 真实的情况是从这行开始的下一行,这个脚本做两件事:它输出行content-type: text/plain, 接着开始一个空行;第二, 它调用unix系统时间date程序, 这样输出日期和时间. 脚本执行后输出应该这样:

content-type: text/plaintue oct 25 16:15:57 edt 1994

这个content-type是什么东东?它是个特殊的编码,web服务器用来告诉浏览器输出这个文本是什么类型的. 这与html中content-type含义是一样的。

这样浏览器的输出就如图3.

图3 date脚本输出结果.

这是最基本的,实际情况要复杂得多,总之可以用来理解浏览器、服务器和脚本之间是怎样工作的。

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

根据前面的阐述,这个脚本内容是这样::

#!/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目录,那没用的。

《CGI脚本入门学习》全文内容当前网页未完全显示,剩余内容请访问下一页查看。


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

#!/bin/shecho "content-type: text/html"echoecho "<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"fiecho "</body></html>"

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

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

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

<a href="http://www.ahsrst.cn">is john logged in?</a>

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

问题

这里是使用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命令.

cgi变量

表2 总结那些环境变量.

环境变量         

意义

server_namecgi脚本运行时的主机名和ip地址.server_software你的服务器的类型如: cern/3.0 或 ncsa/1.3.gateway_interf-ace运行的cgi版本. 对于unix服务器, 这是cgi/1.1.server_protocol服务器运行的http协议. 这里当是http/1.0.server_port服务器运行的tcp口,通常web服务器是80.request_methodpost 或 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/http://www.ahsrst.cnntent_length对于用post递交的表单, 标准输入口的字节数.

表单输入的解码程序

《CGI脚本入门学习》全文内容当前网页未完全显示,剩余内容请访问下一页查看。

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

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

uncgi

说明原码可以从 http://www.ahsrst.cn获得。

cgi-lib.pl

这是由steve brenner编写的, 帮助你管理输入. 他能从get和post获取输入并且放置在一个perl列表或阵列中. 更新的版本也能处理来自表单的文件上传. 从这儿可以得到信息与原码 http://www.ahsrst.cn 如果你决定用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.ahsrst.cn 了解更多的情况.

另一个处理用perl编写的cgi地址是 http://www.ahsrst.cn .

自己做

找专门书籍学习吧: http://www.ahsrst.cn

非解剖的脚本头部

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

<isindex> 脚本

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

总结

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

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

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

本人汉化了一个古老的通用留言簿,大家可以拿去做自己的留言簿。

本入门说明可以自由拷贝,但请不要删除板桥斋字样,到底我花了一些时间在上面,你我都是各取所需嘛:-)。

网页基本教材之CGI脚本入门学习2017-04-26 16:05 | #2楼

cgi 意思为 common gateway interf-ace, 一种基于浏览器的输入、在web服务器上运行的程序方法. cgi脚本 使你的浏览器与用户能交互,为了在数据库中寻找一个名词, 提供你写入的评论,或者从一个表单中选择几个条目并且能得到一个明确的回答. 如果你曾经遇到过在web上填表或进行搜索, 你就是用的cgi脚本. 你那时也许没有意识到,因为大部分工作是在服务器上运行的,你看到的只是结果.

作为一个网页设计者, 你创建客户端的 cgi脚本, 服务器端的程序用来处理用户输入, 结果返回给用户.

在这里你将学习关于cgi脚本的一切:

cgi脚本是什么?它是怎样工作的

一个cgi脚本输出象什么?

怎样用参数或无参数创建一个cgi脚本

怎样创建一个返回规定响应的cgi脚本

怎样创建一个输入表单的cgi脚本

有关在使用cgi脚本中的问题

你能在脚本中使用的cgi变量


本章节假设在unix系统下的。


说明是个cgi脚本是因为这里面有个cgi-bin的路径. 在许多服务器cgi-bin是仅能够放置cgi脚本 的目录.

当你选择这个连接时, 你的浏览器将向http://www.ahsrst.cn服务器提出请求. 服务器接收这个请求计算出url处的脚本文件名然后执行这个脚本.

这个getdate脚本, 在unix系统中执行是这样的:

#!/bin/shecho content-type: text/plainecho/bin/date

第一行是个特殊的命令,告诉unix系统这是个shell脚本; 真实的情况是从这行开始的下一行,这个脚本做两件事:它输出行content-type: text/plain, 接着开始一个空行;第二, 它调用unix系统时间date程序, 这样输出日期和时间. 脚本执行后输出应该这样:

content-type: text/plaintue oct 25 16:15:57 edt 1994

这个content-type是什么东东?它是个特殊的编码,web服务器用来告诉浏览器输出这个文本是什么类型的. 这与html中content-type含义是一样的。

这是最基本的,实际情况要复杂得多,总之可以用来理解浏览器、服务器和脚本之间是怎样工作的。

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

根据前面的阐述,这个脚本内容是这样::

#!/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/shecho "content-type: text/html"echoecho "<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"fiecho "</body></html>"

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

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

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

<a href="http://www.ahsrst.cn">is john logged in?</a>

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

http://www.ahsrst.cn 得到原码,安装在你自己的cgi-bin目录下.

   

http://www.ahsrst.cn获得。

http://www.ahsrst.cn 如果你决定用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)分隔多个名字. 这样可以正常处理你的脚本.

http://www.ahsrst.cn了解更多的情况.

另一个处理用perl编写的cgi地址是http://www.ahsrst.cn

http://www.ahsrst.cn

e-mail我,

这样一举两得啊,本入门说明可以自由拷贝,但请不要删除板桥斋字样, 到底我花了一些时间在上面,你我都是各取所需嘛:-)。

注意:上述程序不能在中文win95中编辑, 可以用ultra edit来编辑,注意转换unix格式 ,必须采用unix格式存盘,再上载,用telnet登陆,在命令行键入perl sample.pl,看有无bug,再 在浏览器中调用。

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

【CGI脚本入门学习】相关文章:

韩语初学入门学习计划04-30

脚本测试经验分享02-27

分镜头脚本格式03-25

中学消防演练方案脚本05-14

消防应急预案演练脚本05-14

写脚本的注意事项05-17

ie总是弹出脚本错误提示窗口05-23

校园疏散救援应急演练工作脚本(通用11篇)02-28

维修无线电入门常识04-10

易经风水学入门基础知识04-10