📄 0503004.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>
<body>
<div align="justify">
<table border="0" width="100%" class="font" height="57">
<tr>
<td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">VC知识库(五)</font>
</td>
<td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">www.vckbase.com</font>
</td>
</tr>
<tr>
<td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
<BIG> 一种更亲切的<FONT class=eng>CGI</FONT>开发系统<FONT
class=eng>WinCGI</FONT></BIG>
</td>
</tr>
<tr>
<td width="100%" height="17" class="info" align="center" colspan="2">
<SMALL> 闻怡洋 <A
href="http://www.vchelp.net/"><FONT
class=engul>http://www.vchelp.net/</FONT></A></SMALL>
</td>
</tr>
<tr>
<td width="100%" height="22" class="font" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="5" class="font" colspan="2">
<SMALL>
<P>CGI的开发在某种角度来说过于复杂,主要是体现在获取环境变量和分解/解码数据上面。在Windows系统中可以使用WinCGI系统来进行开发。WinCGI的优点就在于减轻了开发者分解/解码数据的负担,而且提供统一的输入输出方式供使用。</P>
<P>在WinCGI程序执行时第一个参数会是一个文件名称,如:yourCGI.exe
para.txt,在该文件中记录了所有的环境变量信息和参数信息,而且该文件的结构与INI文件结构相同,所以利用Windows提供的标准函数:GetPrivateProfileString就可以取出所有的参数。而且文件中的数据全部已经经过解码,你可以直接使用。
</P>
<P>在参数文件中有以下几个区(Section)
<UL>
<LI>[CGI]
<LI>[Accept]
<LI>[System]
<LI>[Extra Headers]
<LI>[Form Literal]
<LI>[Form External]
<LI>[Form File]
<LI>[Form Huge] </LI></UL>文件格式如同: <PRE>[CGI]
CGI Version=CGI/1.2 (Win)
Query String=XXXXXX
[Section]
key=value
key=value
...
</PRE>
<P>在这个参数文件中对我们特别有用的是以下一些数据:
<P>
<P>[CGI]区中的各个关键字记录了系统的参数和对方浏览器和对方IP地址等等信息。下面列出一些常用的关键字:
<UL>
<LI>Request Method:传送数据的方式,如果传送方式为GET,你也可以通过检查Query
String关键字的值来取得传送来的数据,否则就需要通过读取[Form Literal]区来取得输入。
<LI>Request Protocol:所使用的协议和版本,如HTTP/1.0。
<LI>From:浏览器使用者的邮件地址。
<LI>User Agent:浏览器名称,如Netscape,Internet Explorer。
<LI>Content Type:上传数据的类型,格式如type/subtype
<LI>Content Length:上传数据的长度
<LI>Content File:当数据过长时通过写如该关键字所指明的文件来保存数据。
<LI>Server Name:WEB服务器的网络地址名称。
<LI>Server Software:WEB服务器的软件名称和版本。
<LI>Server Port:WEB服务器监听的端口。
<LI>CGI Version:服务器上CGI系统的版本。
<LI>Remote Address:客户端的IP地址。 </LI></UL>
<P></P>
<P>[CGI]区中的各个关键字记录了系统的参数和对方浏览器和对方IP地址等等信息。如果传送方式为GET,则需要检查Query
String关键字的值。</P>
<P>[ACCEPT]区中的关键字记录了客户方浏览器可以接受的数据类型。所以可以看出[CGI]区和[ACCEPT]区中的信息和普通CGI中的环境变量的值没有区别。</P>
<P>[SYSTEM]区是一个很重要的区,GMT Offset关键字表示客户方的时区,Output
File关键字为输出文件的文件名称,因为在WinCGI中你不需要直接向输出流中写数据,取而代之的是使用临时文件来保存数据,在CGI程序退出后WinCGI系统会将该文件的内容返回给客户并删除该文件(同时也删除调用过程中的所有临时文件)。
</P>
<P>接下来的[Form
Literal]区包含有经过解码的数据。原本格式为:key=value&key=value&...的数据经过解码后被存放于这个区,但是一些例外的情况就要使用[Form
External]和[Form Huge]区。在[Form External]区中数据格式如同:key=pathname
length,当上传的字符串长度大于254时,就会使用这个区,pathname指明了包含被解码后的字符存放的文件,length为字符串长度。当上传的数据长度大于64K时,数据会被存放入一个独立的文件,该文件的文件名称由[System]区中的Content
File关键字指明。[Form Huge]区中数据格式如同:key=offset
length其中offset为该数据在文件中的起始位置,length为数据的长度。 </P>
<P>下面有一个例子:设输入为,a_cgi_sample.exe?name=your_name&email=your@mail.com&memo=length_gt_254<BR>则文件中包含数据的几个区形式如下:<PRE>[Form Literal]
name=your_name
email=your@mail.com
[Form External]
;假设memo字段长度为500
memo=a_temp_file 500
</PRE>
<P></P>
<P>最后给出一个WinCGI程序的伪代码轮廓:<PRE>void main(int argc,char** argv)
{
if(argc == 1)
error raise; //无法得到配置文件
char szCfgFile[]=argv[1];
Read [Form Literal] section for input data
char szOutFile[]=Read "Output File" key from [System] section;
fopen(szOutFile)
{
write result to outFile
close outFile
}
return ;//退出
}
</PRE>
<P>总的说来,WinCGI程序与普通CGI的程序的区别不大,只是在输入输出的方法上略有区别。</P>
</SMALL>
</td>
</tr>
<tr>
<td width="100%" height="12" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="6" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="8" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="17" class="font" colspan="2"></td>
</tr>
</table>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -