您现在的位置是:网站首页> 编程资料编程资料
CGI脚本入门学习资料_其它_
2023-05-26
393人已围观
简介 CGI脚本入门学习资料_其它_
学习CGI脚本(脚本)
作为一个网页设计者, 你创建客户端的 CGI脚本, 服务器端的程序用来处理用户输入, 结果返回给用户.
在这里你将学习关于CGI脚本的一切:
- CGI脚本是什么?它是怎样工作的
- 一个CGI脚本输出象什么?
- 怎样用参数或无参数创建一个CGI脚本
- 怎样创建一个返回规定响应的CGI脚本
- 怎样创建一个输入表单的CGI脚本
- 有关在使用CGI脚本中的问题
- 你能在脚本中使用的CGI变量
CGI脚本是什么?
CGI 脚本难道不是一个真正的脚本?按照你的服务器的支持, 他们可能是一个编译好的程序或者批命令文件或者其他可执行的东西. 为了简单起见,我们统称他们为脚本scripts.
CGI脚本是用下列两种方法使用的: 作为一个表单的ACTION 或 作为一个页中的直接link。
CGI脚本是怎样工作的?
图1. 从浏览器到服务器到脚本到程序 记住再回来噢!
这有个简短的示意解释:
- 一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样在任何地方出现。
- 服务器接收请求, 按照那个URL指向的脚本文件(注意文件的位置和扩展名),执行脚本.
- 脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序.
- 脚本产生某种Web服务器能理解的输出结果.
- 服务器接收来自脚本的输出并且把它传回浏览器,让用户了解结果。
一个简单的例子
在图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.
这是最基本的,实际情况要复杂得多,总之可以用来理解浏览器、服务器和脚本之间是怎样工作的。
我能用CGI脚本吗?
肯定吗?就是做不到,学学也可以?好吧!让我们继续.
你的服务器配置允许CGI脚本吗?
但是即使你有一个Web服务器, 这个服务器必须特别地为运行CGI脚本配置一下. 那意味着你所有的脚本必须放置在一个叫做cgi-bin的目录下.
在编写CGI脚本之前, 询问你的服务器管理者是否允许你安装和运行CGI脚本, 并且如果可以的话,他们必须放置在哪儿?还有,你必须有个真正的Web服务器,如果是FTP或Gopher服务器,那你就不能用CGI.
如果你在自己的服务器上运行, 你必须特别地创造一个叫cgi-bin的目录,并配置你的服务器认可这个目录为一个脚本目录. 也必须记住下面有关CGI脚本特点:
- 每个脚本是个程序, 它运行在浏览器可以请求的系统上, 执行时使用CPU时间和内存. 如果有成打上千的这些脚本同时运行,会怎样?你的系统将不忍负载直至崩溃。
- 如果你不仔细地编写你的CGI脚本, 你将有可能让别人通过你的CGI脚本参数进入伤害你的系统.
你会编程吗?
你必须用什么编程语言?
在这本学习手册中,仅用两种语言编写CGI脚本: UNIX shell和 Perl语言. 这个shell是适合在任何相近的UNIX系统上运行并且容易学习, 但是处理复杂的情况就困难了. Perl, 就要用这个语言了, 它是免费的, 这个语言是稳定和强大的,类似C,但它也是较难学习的.
你的服务器设置正确了吗?
如果你是租用服务器,就要是否允许运行CGI脚本.
如果你拥有自己的服务器,检查你的服务器说明书是怎样处理CGI脚本的.
如果你用的不是UNIX?
解剖一个CGI脚本
输出头部
这个头部是实际不是文本的一部分,是服务器与浏览器之间的信息协议,你实际看不到。
有三个类型的头部: Content-type, Location, 和Status. Content-type 最普遍的。
有关content-type解释可以见有关HTML的说明, 一个你可以发出的特定编码象这样:
Content-type: text/html在这个例子中,输出数据的类型是text/html; 换句话说, 他是个HTML文件.
Format | Content-Type |
| HTML | text/html |
| Text | text/plain |
| GIF | image/gif |
| JPEG | image/jpeg |
| PostScript | application/postscript |
| MPEG | video/mpeg |
输出数据
练习1: 小试试.
图4. 脚本的结果
这是个很简单的例子, 他能这样备调用:
Is Laura Logged in?这是没有输入的脚本,它只运行并且返回数据.
根据前面的阐述,这个脚本内容是这样::
#!/bin/sh
echo Content-type: text/html
echo "
"echo "
echo "
"为了测试我是否已经登陆系统,用who命令(我的登陆名假设为lemay), 储存结果在变量ison中. 如果我登陆, 变量ison将有些内容,否则则是空的.
ison='who | grep lemay'试验结果及返回相应提示的脚本是这样:
if [ ! -z "$ison" ]; then echo "最后关闭HTML:Laura is logged in."
else echo "Laura isn't logged in."
fi
echo ""现在你通过从命令行运行他,测试一下,你将得到一个结果说我未登陆你的系统,当然不可能的,他的输出是这样的:
Content-type: text/html这是输出的一个HTML文本,这样你的浏览器能正常显示他,因为他是个HTML文件。Are You There? Laura is not logged in.
这个例子完整的脚本如下:
#!/bin/sh echo "Content-type: text/html" echo echo "" echo "Is Laura There? " echo "" ison='who | grep lemay' if [ ! -z "$ison" ]; then echo "Laura is logged in" else echo "
Laura isn't logged in" fi echo ""
带有参数的脚本
run my script当服务器接收到这个请求,它传递 arg1, arg2, 和 arg3 参数给脚本. 你然后能在脚本中使用这些参数.
这个方法有时叫查询, 因为早期它用在搜索功能中.
练习2: 检查是否有人登陆.
我们取个不同题目:
#!/bin/sh echo "Content-type: text/html" echo echo "" echo "在上面的例子中, 下一步应该是测试我是否登陆,在这里我们用参数${1}代替我的名字lemay, ${1}作为第一个参数, ${2}作为第二个, ${3}作为第三个.Are You There? " echo ""
ison='who | grep "${1}"'剩下的所有修改如下:
if [ ! -z "$ison" ]; then echo "$1 is logged in" else echo "
$1 isn't logged in" fi
echo ""好了,让我们修改HTML页中的连接吧!原来是这样:
Is Laura Logged in?修改为通用查询功能后是这样,比如查询名字叫john的人是否登陆:
Is John Logged in?在你的服务器上试试,看是否有结果。
传递其他信息给脚本
看下面一个路径信息path information例子, :
http://myhost/cgi-bin/myscript/remaining_path_info?arg1+arg2当脚本运行时,在路径中的信息将
