工作原理
CGI是服务器上运行的网关守护进程。根据客户端在进行请求时所采用的方法,服务器负责收集由客户端提供的信息,并根据客户端请求的CGI脚本程序文件名,执行该脚本程序。所谓脚本程序就是该程序在CGI控制下运行程序。CGI脚本程序启动后,服务器将客户端的信息传给此程序,该程序对客户的信息处理后,将运行结果交
给服务器,由服务器负责再向客户端传递。
CGI脚本是用下列两种方法使用的:
1、作为一个表单的ACTION
2、作为一个页中的直接link。
这有个简短的工作示意:
1、一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样在任何地方出现。
2、服务器接收请求, 按照那个URL指向的脚本文件(注意文件的位置和扩展名),执行脚本。
3、脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序。脚本产生某种Web服务器能理解的输出结果。
4、服务器接收来自脚本的输出并且把它传回浏览器,让用户了解结果。
一个指向CGI脚本的连接,它的HTML是这样的:
<A HREF="http://linux.cgi.com.cn/~zzy71616/cgi-bin/getdate.cgi">Display the Date</A>
说明是个CGI脚本是因为这里面有个cgi-bin的路径。在许多服务器cgi-bin是仅能够放置CGI脚本的目录。当你选择这个连接时, 你的
浏览器将向:linux.cgi.com.cn服务器提出请求。服务器接收这个请求计算出URL处的脚本文件名然后执行这个脚本.
环境变量
CGI脚本程序运行时,服务器使用环境变量和标准输入、标准输出与脚本程序进行信息交换。
下表显示常用环境变量:
类型 变量 含义
服务器信息 SERVER_SOFTWARE 服务器软件名称及版本
SERVER_NAME 服务器名称
GATEWAY_INTERFACE CGI名称及版本
SERVER_PROTOCAL 服务器传输协议名称及版本
SERVER_PORT 服务器连接的端口
REMOTE_HOST 客户机域名
客户机信息 REMOTE_IP 客户机IP地址
REMOTE_USER 获得访问者使用HTML的输入密码
REMOTE_IDENT 获得访问者登录服务器的输入密码
脚本信息 REQUEST_METHOD 客户端请求的方法
PATH_INFO 客户端请求的CGI的路径
PATH_TRANSLATED 客户端请求的CGI的全路径信息
SCRIPT_NAME 客户端请求的CGI名称
QUERY_STRING 请求中的查询信息
CONTENT_LENGTH 用户信息长度
DOCUMENT_URI 请求文档的路径和名称
脚本放置
你的脚本必须放在有执行权限的目录中。
如果你的服务器是UNIX:
确定你的脚本是可执行的方法为:
用chmod +x 你的脚本.cgi或:chmod 755 你的脚本.cgi
如果你的服务器是PERSON WEB或WINDOWS NT:
把你的脚本必须放在可执行目录中。
如果客户端是win95,使用远程服务器,可以用telnet登陆你的服务器,执行命令行,当然必须了解UNIX命令。
如果客户端是win95,使用内部网WINDONS NT或 PEER WEB 的服务器,执行CGI程序与其他程序差不多。
在实际中,一般免费网域均不提供执行目录,所以要制作CGI程序,就有必要寻找一个提供CGI存放服务的免费网域。如:
重庆太阳城
联讯
Web服务器设置
如果你既不想登陆到远程服务器,有没有内联网的服务器,那你要调试CGI程序就必须设置个人的Web服务器。
1、 首先,要为计算机设置TCP/IP协议
在“控制面板”的“网络”中添加TCP/IP协议,然后在“TCP/IP属性”中的“IP地址”标签中选择指定IP地址”并输入任意一个正确的IP地址。在“DNS配置”标签中选择“使DNS无效”。当然,
也可以不指定IP地址,那么在以后就只能通过机器名称来识别web服务器了(http://yomachine,机器名称可以在“控制面板”,“网络”中查出)
2、安装个人Web服务器,方法如下:
(1) 在“控制面板”的“网络”的“配置”标签中单击“添加”按钮;
(2) 在弹出的“选择网络组件类型”对话框中,选择“服务”在“厂商”栏中选择“Microsoft”,在“网络服务”栏中选择“PersonalWeb Server”,然后单击“确定”按钮。这时Windows 95将自动安装Personal Web Server。
(3) 安装完成后,“控制面板”中会出现“个人Web服务器”图标,双击图标即可以对自己的个人Web服务器做设置了
3、设置CGI程序的运行目录
在“控制面板”中双击“个人Web服务器”图标,选择“管理”标签下的“管理”按钮,这时Personal Web Server会自动启动你的浏览器,并要求连接,连接成功后,显示Internet 服务管理页面。选择“WWW管理”,选择“目录”,选择“ADD”,在WWW服务器中加入你的CGI-BIN目录,然后,一定不要忘了,要把它设为可执行。同时,建议你把它虚拟为"cgi-bin"目录,这样在你的HTML里面你就可以用"/cgi-bin/???.cgi"来调用CGI程序了全部设置好之后,可以在浏览器中打“http://你的机器名称”或者“http://你的机器的IP”来检验一下你的设置。
一个C编写的CGI例子
一、编辑test.c
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void PrintMimeHead(){
printf("Content-type:text/htmln");
printf("Progma:no-cachen");
printf("n");
}
void PrintHtmlHead(){
printf("<html>n");
printf("<head></head>n");
printf("<body>n");
printf("<h1>hello!</h1>n");
}
void PrintHtmlTailer(){
printf("</body>n");
printf("</html>n");
}
void PrintForm(){
printf("<form method=POST action="%s">n",getenv("SCRIPT_NAME"));
printf("your name:<input type=text name=name size=20><br>n");
printf("your email:<input type=text name=mail size=30><br>n");
printf("<input type=submit value="ok"><br>n");
printf("</form>");
}
void ProcessDate(){
int i,x;
int len;
char input_date[1000]="";
char *StringLen;
StringLen=getenv("CONTENT_LENGTH");
if(StringLen!=Null)
len=atoi(StringLen);
else len=0;
for(i=0;i<len;i++)
{x=fgetc(stdin);
if(x==EOF) break;
input_data[i]=x;
}
printf("you enter:%sn",input_data);
}
void main(){
char *pRequestMethod;
setvbuf(stdout,NULL,_IONBF,0);
pRequestMethod=getenv("REQUEST_METHOD");
if (pRequestMethod==NULL)
{printf("no form run!");}
else if(stricmp(pRequestMethod,"get")==0){
PrintMimeHead();
PrintHtmlHead();
PrintForm();
PrintHtmlTailer();
}
else if(stricmp(pRequestMethod,"post")==0){
PrintMimeHead();
PrintHtmlHead();
ProcessDate();
PrintForm();
PrintHtmlTailer();
}
else{
PrintMimeHead();
PrintHtmlHead();
printf("no Method!");
PrintHtmlTailer();
}
fflush(stdout);
}
二、编译TEST.C
三、存放到服务器默认CGI目录中
四、编辑HTML调用TEXT.EXE,即可。
一个PERL编写的CGI例子
为了让在Win95上调好的CGI程序在其他的操作系统上都能使用,我们选择Perl作为CGI编程语言Perl是一个很好用的CGI编程语言,与其它的编程语言相比较,它具有在Unix、WinNT、Win95、Dos、Linux、FreeBSD、OS2、Macitosh等操作系统上都能使用的优点
要在自己的Win95上调试Perl CGI程序,需要做两件事情:
1、设置Web服务器
2、安装Perlfor Win32
在自己的Win95上调试准跨平台的CGI程序
安装Perl for Win32
要在Windows 95上使用Perl来执行CGI程序,还要再安装Perl for Win32 系统Perl for Win32 在perl32可以下载下载了109-i86.zip并解压到某一个盘上后,运行Perl目录下的install.bat,
系统会分别提问:
1.Do you wish to proceed? Y
2.Modify search path? Y
3.continue to install perlIS.dll? Y
4.please choose a file extension to associate with PerlIS.dll
Extension: 按你的情况,键入CGI程序后缀“pl”或者“cgi”
这时,按我们的实验,应该是已经可以运行CGI程序的了,可以用记事本写一个简单的CGI脚本试一试。用记事本新建一个文件,然后把下面的代码Copy进去,再将它保存为CGI-BIN目录下的test.cgi或者test.pl(视安装过程中你对第四个问题的回答而定)
#!/usr/bin/perl
print "Content-type:text/htmlnn";
print"恭喜!CGI程序运行成功了!"
把这个文件放在你自己的可执行的cgi-bin目录中。
然后新建一个名称为test.htm的HTML文件,放在你的某一个WWW目录中。其内容如下:
<html>
<body>
<a href="http://你的机器名称/cgi-bin/test.cgi">测试CGI(.cgi后缀)</a>
<body>
</html>
接下来运行测试。打开浏览器,在地址栏中键入“http:// 你的Web服务器名/www目录/test.htm”,会出现一个联接,按下这个联接,就可以查看CGI程序的运行结果。失败的情况有成千上万种,但是成功的结果只有一个,就是在屏幕上出现了“恭喜!CGI程序运
行成功了!”。当然,因为win系统不能正确判断输出类型的原因,“恭喜”前面也许还会有一行“Content-type:text/html”。这个不要紧,当你在其它操作系统上用这个CGI程序时,它会消失的!
当然,也可以从网上的另一台计算机来测试,只需要在一个健康的TCP/IP网络上输入正确的URL就行。如果CGI程序还不行,你需要修改Windows 95的注册表了。方法是先运行注册表编辑器regedit,然后依次打开“HKEY_LOCAL_MACHINESystemCurrentcontrlsetServicesW3svcParametersScriptMap”,
加入“.pl ‘C:PERLBINperl.exe%s %s’”
(或者.cgi......)。
退出注册表文件后,重新启动计算机,然后进入CGI-BIN目录下,从中任选一个扩展名为.pl或者.cgi的程序文件并双击,这时系统会出现一个列表窗口,询问使用什么程序来打开这种文件,在文件列表中找到“perl”(如果找不到可以在“其他”项中按路径来指定),并选定“始终使用该软件打开这种类型的文件”项,单击“确定”即可。
Windows NT Server 4.0中的Web 服务功能通过NT自带的IIS(Internet InformationServer) 来实 现。在Windows NT Server 4.0 中Perl for win32的安装过程与Windows95基本一样,只是修改注册表时应加入的内容为:
“.pl:REG_SZ:C:PerlBinperl.exe%s %s”。(出处:不详 ) |