📄 teach_sp_12.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="闻怡洋 wyy_cq@cmmail.com">
<title>Visual C++/MFC开发指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../../submit_navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../../main.css">
</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>
<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每点一下上面的广告我就能有更多的上网时间为大家寻找资料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整体框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--标记放置区域-->
<tr>
<td width="30%" align="center" bgcolor="#8E8E8E" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
<td width="70%" align="center" bgcolor="#8E8E8E" valign=middle><img src=../../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#939393" align=center><font color=white>您当前位置</font> <a href=../../index.htm><font color=white>首页</font></a> <a href=../index.htm><font color=white>开发教程</font></a> <a href=index.htm><font color=white><font class=engul>Visual C++/MFC</font>专题讲座</font></a> <font color=white>1.2 一种更亲切的<font class=eng>CGI</font>开发系统<font class=eng>WinCGI</font></font> <font color=white><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></font></td>
</tr>
</table><!--标记放置区域 END-->
<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr bgcolor="#F4F4F4">
<td><!-- article title begin here-->
<br>
<p align=center><big>1.2 一种更亲切的<font class=eng>CGI</font>开发系统<font class=eng>WinCGI</font></big></p>
<!-- article content begin here-->
<table border=0 align=center width=100%>
<tr><td><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]
</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>
<li>Request Protocol:所使用的协议和版本,如HTTP/1.0。</li>
<li>From:浏览器使用者的邮件地址。</li>
<li>User Agent:浏览器名称,如Netscape,Internet Explorer。</li>
<li>Content Type:上传数据的类型,格式如type/subtype</li>
<li>Content Length:上传数据的长度</li>
<li>Content File:当数据过长时通过写如该关键字所指明的文件来保存数据。</li>
<li>Server Name:WEB服务器的网络地址名称。</li>
<li>Server Software:WEB服务器的软件名称和版本。</li>
<li>Server Port:WEB服务器监听的端口。</li>
<li>CGI Version:服务器上CGI系统的版本。</li>
<li>Remote Address:客户端的IP地址。</li>
</ul>
</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>最后给出一个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>
<p>总的说来,WinCGI程序与普通CGI的程序的区别不大,只是在输入输出的方法上略有区别。</p>
<p align=center><a href=index.htm#charpter1>返回</a></p>
</td></tr><!-- article content end-->
</table>
<p align=center><small>版权所有 闻怡洋 <a href=http://www.vchelp.net/><font class=engul>http://www.vchelp.net/<font></a></small></p>
</td>
</tr><!-- article title end-->
</table>
</td></tr></table><!--整体框架 END-->
<!--- BEGIN CLICK2NET CODE --->
<center><a href="http://redirect.click2net.com/?A056824,92" target="_blank">
<img border=0 alt="你每点一下广告我就能有更多的上网时间为大家寻找资料" src="http://image.click2net.com/?A056824,92" width="468" height="60"></a>
<br><font style=small class=engul><a href="http://www.click2net.com/" target="_blank">Free Advertising from Click2Net!</a></font></center>
<!--- END CLICK2NET CODE --->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -