- 相关推荐
CGI脚本入门学习
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://cankao.gcw818.com服务器提出请求. 服务器接收这个请求计算出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://cankao.gcw818.com">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://cankao.gcw818.comntent_length对于用post递交的表单, 标准输入口的字节数.表单输入的解码程序
《CGI脚本入门学习》全文内容当前网页未完全显示,剩余内容请访问下一页查看。
目前有两个程序: 通用目的的uncgi, 和cgi-lib.pl, 这是个perl库,用于perl编写的cgi脚本.
当然也有表单上载时可以解码的程序,很少。
uncgi
说明原码可以从 http://cankao.gcw818.com获得。
cgi-lib.pl
这是由steve brenner编写的, 帮助你管理输入. 他能从get和post获取输入并且放置在一个perl列表或阵列中. 更新的版本也能处理来自表单的文件上传. 从这儿可以得到信息与原码 http://cankao.gcw818.com 如果你决定用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://cankao.gcw818.com 了解更多的情况.
另一个处理用perl编写的cgi地址是 http://cankao.gcw818.com .
自己做
找专门书籍学习吧: http://cankao.gcw818.com
非解剖的脚本头部
按照本书阐述,大多数情况可以正常操作,在一些情况下不是这样的,你可以翻阅说明书了解。
<isindex> 脚本
为了在cgi中完成讨论组, 我们看看叫<isindex>的搜索. 这是早期在浏览器中用来向服务器发出搜索关键字的办法,参看以前的资料。
总结
cgi脚本, 有时叫服务器端脚本或网关脚本。 在internet上有很多免费资源,你可以搜索下载读懂他们,当然都是英文的,如果你下决心翻译他们(可能更加强理解). 这样一举两得啊.
注意:上述程序可以用ultra edit来编辑,注意转换unix格式 ,必须采用unix格式存盘,再上载,用telnet登陆,在命令行键入perl sample.pl,看有无bug,再 在浏览器中调用。cgi程序包括放置cgi的目录一定要改属性为777, 要写入的html文件也要改属性为777.
现在网上有很多免费的cgi,基本可以满足一般需求,请到这个网址查询你要的cgi:http://cankao.gcw818.com
本人汉化了一个古老的通用留言簿,大家可以拿去做自己的留言簿。
本入门说明可以自由拷贝,但请不要删除板桥斋字样,到底我花了一些时间在上面,你我都是各取所需嘛:-)。
网页基本教材之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://cankao.gcw818.com服务器提出请求. 服务器接收这个请求计算出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://cankao.gcw818.com">is john logged in?</a>
在你的服务器上试试,看是否有结果。
http://cankao.gcw818.com 得到原码,安装在你自己的cgi-bin目录下.
http://cankao.gcw818.com获得。
http://cankao.gcw818.com 如果你决定用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://cankao.gcw818.com了解更多的情况.
另一个处理用perl编写的cgi地址是http://cankao.gcw818.com
http://cankao.gcw818.com
e-mail我,
这样一举两得啊,本入门说明可以自由拷贝,但请不要删除板桥斋字样, 到底我花了一些时间在上面,你我都是各取所需嘛:-)。
注意:上述程序不能在中文win95中编辑, 可以用ultra edit来编辑,注意转换unix格式 ,必须采用unix格式存盘,再上载,用telnet登陆,在命令行键入perl sample.pl,看有无bug,再 在浏览器中调用。
现在网上有很多免费的cgi,基本可以满足一般需求,请到这个网址查询你要的cgi:http://cankao.gcw818.com
【CGI脚本入门学习】相关文章:
flash动作脚本从入门开始09-24
shell脚本基础学习09-24
韩语初学入门学习计划04-30
韩语初学入门学习计划03-15
平面拍摄脚本09-24
牙膏广告脚本09-24
电影脚本写作09-24
校园电影脚本09-24
宣传短片脚本09-24
电影脚本制作09-24