CGI - 基本简介
CGI脚本难道不是一个真正的脚本,按照服务器的支持,可能是一个好的程序或者批命令文件或者其他可执行的东西。为了简单起见,统称为脚本scripts。
CGI脚本是任何运行在web服务器上的程序。CGI脚本是用下列两种方法使用的:作为一个表单的或作为一个页中的直接link。CGI脚本有服务器调用,基于浏览器的数据输入。
1、一个URL指向一个CGI脚本。一个CGI脚本的URL能如普通的URL一样在任何地方出现。
2、服务器接收请求,按照那个URL指向的脚本文件(注意文件的位置和扩展名),执行脚本。 3、脚本执行基于输入数据的操作,包括查询、计算数值或调用系统中其他程序。 4、脚本产生某种Web服务器能理解的输出结果。 5、服务器接收来自脚本的输出并且把它传回浏览器,让用户了解结果。CGI - 配置条件
为了能写和运行CGI脚本,你需要一个Web服务器。不象通常的文件,你不能在本地系统上写或试验CGI脚本;通过Web服务器来做这个。但是即使你有一个Web服务器,这个服务器必须特别地为运行CGI脚本配置一下。那意味着你所有的脚本必须放置在一个叫做cgi-bin的目录下。
在编写CGI脚本之前,询问服务器是否允许你安装和运行CGI脚本,并且如果可以的话,他们必须放置在哪儿。还有,必须有个真正的Web服务器,如果是或Gopher服务器,那就不能用CGI。
如果在自己的服务器上运行,你必须特别地创造一个叫cgi-bin的目录,并配置服务器认可这个目录为一个脚本目录。也必须记住下面有关CGI脚本特点:
1、每个脚本是个程序,它运行在浏览器可以请求的系统上,执行时使用时间和内存。如果有成打上千的这些脚本同时运行,将不忍负载直至崩溃。
2、如果你不仔细地编写CGI脚本,你将有可能让别人通过CGI脚本参数进入伤害系统。你可以用你熟悉的任何语言编写CGI脚本,只要脚本遵守下一节所陈列的规则即可,只要那个语言能在Web服务器系统上运行。
在这本学习手册中,仅用两种语言编写CGI脚本:UNIXshell和Perl语言。这个是适合在任何相近的UNIX系统上运行并且容易学习,但是处理复杂的情况就困难了。Perl,就要用这个语言了,它是免费的,这个语言是稳定和强大的,类似C,但它也是较难学习的。
为了运行任何一个CGI脚本,不管简单或复杂的,服务器必须设置成能够运行他们,必须放置在一个特定的目录,必须有一个依赖你服务器设定的。如果你是租用服务器,就要是否允许运行CGI脚本。如果你拥有自己的服务器,检查服务器说明书是怎样处理CGI脚本的。
CGI - 输出头部
有三个类型的头部:Content-type,Location,和Status。Content-type最普遍的。
有关content-type解释可以见有关HTML的说明,一个你可以发出的特定编码象这样:
Content-type:text/html 输出数据的类型是text/html;换句话说,他是个HTML文件。
通用格式和content-types。
CGI - 输出数据
输出的数据应该符合你所规定的content-type;如果content-type是text/html,输出安置应该是在HTML。如果content-type是image/gif,输出应该是在一个二进制的文件。
为了传递一个参数给脚本,可以在URL中使用插入脚本名词和参数之间,用加号(+)表示每个单一的参数,如:
runmyscript 当服务器接收到这个请求,它传递arg1,arg2,和arg3给脚本。你然后能在脚本中使用这些参数。这个方法有时叫查询,因为早期它用在搜索功能中。
CGI - 登陆检查
#!/bin/sh
echo"Content-type:text/html"
echo echo"" echo"AreYouThere?" echo"" 在上面的例子中,下一步应该是测试是否登陆,在这里用参数${1}代替名字lemay,${1}作为第一个,${2}作为第二个,${3}作为第三个。 ison='who|grep"${1}"'剩下的所有修改如下:
if[!-z"$ison"];then
echo"$1isloggedin" else echo"$1isn'tloggedin" fi echo"" 修改HTML页中的连接: IsLauraLoggedin 修改为通用查询功能后是这样,比如查询名字叫john的人是否登陆。CGI - 脚本输出
路径信息Pathinformation是一种不象通常参数脚本那样传递信息的方法。路径Pathinformation通常是指Web服务器上的那些比如配置文件、临时文件或者被脚本因问题调用的文件等等此类文件。
看下面一个路径信息pathinformation例子,
当脚本运行时,在路径中的信息将被放置于环境参数PATH_INFO。你能在脚本内容中使用这些。假设在多页上已有多个连接到同一个脚本。能用这个路径信息显示那个有连接的HTML文件名。这样,在完成处理脚本之后,当你发回一个HTML文件时,能在这个文件里包含一个连接,发回用户一开始那个页。
CGI - 程序语言
可以在搜索程序里找到在那里下载它。VB是Ms的杀手锏,从目前的情况看,正试图使VB无所不能,自然也包括在Internet。请各位注意,VB开发的程序只能在windows平台上被执行,所以它有一定局限。CShell,经典的语言。可惜能做的事情不多,而且必须在Unix平台下。C,C++,真正的无所不能。可是在写CGI的时候显得非常难以掌握。特别是缺乏可以灵活使用的字符串处理函数。对程序员的要求也比较高,维护复杂。
CGI可以提供许多HTML无法做到的功能。比如:a.一个记数器b.顾客信息表格的提交以及统计c.搜索程序d.WEB数据库。用Html是没有办法记住客户的任何信息的,就算用户愿意让你知道。用Html也是无法把信息记录到某一个特定文件里的。要把客户段的信息记录在服务器的上,就要用到CGI。这是CGI最重要的作用,它补充了Html的不足。是的,仅仅是补充,不是替代。