?? 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開發(fā)指南</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>你每點(diǎn)一下上面的廣告我就能有更多的上網(wǎng)時(shí)間為大家尋找資料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整體框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--標(biāo)記放置區(qū)域-->
<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>您當(dāng)前位置</font> <a href=../../index.htm><font color=white>首頁</font></a> <a href=../index.htm><font color=white>開發(fā)教程</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>開發(fā)系統(tǒng)<font class=eng>WinCGI</font></font> <font color=white><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></font></td>
</tr>
</table><!--標(biāo)記放置區(qū)域 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>開發(fā)系統(tǒng)<font class=eng>WinCGI</font></big></p>
<!-- article content begin here-->
<table border=0 align=center width=100%>
<tr><td><small>
<p>CGI的開發(fā)在某種角度來說過于復(fù)雜,主要是體現(xiàn)在獲取環(huán)境變量和分解/解碼數(shù)據(jù)上面。在Windows系統(tǒng)中可以使用WinCGI系統(tǒng)來進(jìn)行開發(fā)。WinCGI的優(yōu)點(diǎn)就在于減輕了開發(fā)者分解/解碼數(shù)據(jù)的負(fù)擔(dān),而且提供統(tǒng)一的輸入輸出方式供使用。</p>
<p>在WinCGI程序執(zhí)行時(shí)第一個(gè)參數(shù)會(huì)是一個(gè)文件名稱,如:yourCGI.exe para.txt,在該文件中記錄了所有的環(huán)境變量信息和參數(shù)信息,而且該文件的結(jié)構(gòu)與INI文件結(jié)構(gòu)相同,所以利用Windows提供的標(biāo)準(zhǔn)函數(shù):GetPrivateProfileString就可以取出所有的參數(shù)。而且文件中的數(shù)據(jù)全部已經(jīng)經(jīng)過解碼,你可以直接使用。
</p>
<p>在參數(shù)文件中有以下幾個(gè)區(qū)(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>在這個(gè)參數(shù)文件中對我們特別有用的是以下一些數(shù)據(jù):<p>
<p>[CGI]區(qū)中的各個(gè)關(guān)鍵字記錄了系統(tǒng)的參數(shù)和對方瀏覽器和對方IP地址等等信息。下面列出一些常用的關(guān)鍵字:
<ul>
<li>Request Method:傳送數(shù)據(jù)的方式,如果傳送方式為GET,你也可以通過檢查Query String關(guān)鍵字的值來取得傳送來的數(shù)據(jù),否則就需要通過讀取[Form Literal]區(qū)來取得輸入。</li>
<li>Request Protocol:所使用的協(xié)議和版本,如HTTP/1.0。</li>
<li>From:瀏覽器使用者的郵件地址。</li>
<li>User Agent:瀏覽器名稱,如Netscape,Internet Explorer。</li>
<li>Content Type:上傳數(shù)據(jù)的類型,格式如type/subtype</li>
<li>Content Length:上傳數(shù)據(jù)的長度</li>
<li>Content File:當(dāng)數(shù)據(jù)過長時(shí)通過寫如該關(guān)鍵字所指明的文件來保存數(shù)據(jù)。</li>
<li>Server Name:WEB服務(wù)器的網(wǎng)絡(luò)地址名稱。</li>
<li>Server Software:WEB服務(wù)器的軟件名稱和版本。</li>
<li>Server Port:WEB服務(wù)器監(jiān)聽的端口。</li>
<li>CGI Version:服務(wù)器上CGI系統(tǒng)的版本。</li>
<li>Remote Address:客戶端的IP地址。</li>
</ul>
</p>
<p>[CGI]區(qū)中的各個(gè)關(guān)鍵字記錄了系統(tǒng)的參數(shù)和對方瀏覽器和對方IP地址等等信息。如果傳送方式為GET,則需要檢查Query String關(guān)鍵字的值。</p>
<p>[ACCEPT]區(qū)中的關(guān)鍵字記錄了客戶方瀏覽器可以接受的數(shù)據(jù)類型。所以可以看出[CGI]區(qū)和[ACCEPT]區(qū)中的信息和普通CGI中的環(huán)境變量的值沒有區(qū)別。</p>
<p>[SYSTEM]區(qū)是一個(gè)很重要的區(qū),GMT Offset關(guān)鍵字表示客戶方的時(shí)區(qū),Output File關(guān)鍵字為輸出文件的文件名稱,因?yàn)樵赪inCGI中你不需要直接向輸出流中寫數(shù)據(jù),取而代之的是使用臨時(shí)文件來保存數(shù)據(jù),在CGI程序退出后WinCGI系統(tǒng)會(huì)將該文件的內(nèi)容返回給客戶并刪除該文件(同時(shí)也刪除調(diào)用過程中的所有臨時(shí)文件)。
</p>
<p>接下來的[Form Literal]區(qū)包含有經(jīng)過解碼的數(shù)據(jù)。原本格式為:key=value&key=value&...的數(shù)據(jù)經(jīng)過解碼后被存放于這個(gè)區(qū),但是一些例外的情況就要使用[Form External]和[Form Huge]區(qū)。在[Form External]區(qū)中數(shù)據(jù)格式如同:key=pathname length,當(dāng)上傳的字符串長度大于254時(shí),就會(huì)使用這個(gè)區(qū),pathname指明了包含被解碼后的字符存放的文件,length為字符串長度。當(dāng)上傳的數(shù)據(jù)長度大于64K時(shí),數(shù)據(jù)會(huì)被存放入一個(gè)獨(dú)立的文件,該文件的文件名稱由[System]區(qū)中的Content File關(guān)鍵字指明。[Form Huge]區(qū)中數(shù)據(jù)格式如同:key=offset length其中offset為該數(shù)據(jù)在文件中的起始位置,length為數(shù)據(jù)的長度。
</p>
<p>下面有一個(gè)例子:設(shè)輸入為,a_cgi_sample.exe?name=your_name&email=your@mail.com&memo=length_gt_254<br>
則文件中包含數(shù)據(jù)的幾個(gè)區(qū)形式如下:<pre>
[Form Literal]
name=your_name
email=your@mail.com
[Form External]
;假設(shè)memo字段長度為500
memo=a_temp_file 500
</pre>
</p>
<p>最后給出一個(gè)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的程序的區(qū)別不大,只是在輸入輸出的方法上略有區(qū)別。</p>
<p align=center><a href=index.htm#charpter1>返回</a></p>
</td></tr><!-- article content end-->
</table>
<p align=center><small>版權(quán)所有 聞怡洋 <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="你每點(diǎn)一下廣告我就能有更多的上網(wǎng)時(shí)間為大家尋找資料" 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>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -