国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

WEB SERVER如何支持CGI/PHP/Perl ___ 程序的核心內容(1)

2024-05-04 23:06:07
字體:
來源:轉載
供稿:網友
來源: zerodj 發布

正文:
自己寫一個函數來支持cgi運行...
思路:
當web server的請求是一個執行文件,
那么就執行這個文件(利用進程),可是如果要傳入數據給cgi該如何辦,那么cgi運行后的結果,在自己的程序中該如何得到呀?

那么就可以是管道,來達到數據的共享!
web頁提交的數據在自己的程序中是可以得到的(socket來得到)!就把數據傳入給管道!
cgi程序需要的數據就從管道中去讀!

當cgi程序運行結束后,就將結果輸出給管道,自己的程序去讀管道中的內容!
然后用socket將結果發送給ie/ns就可以了!

下面只是一個函數,
cgifilename:要執行的cgi程序名稱
ppostvalue:web頁提交的值(post方法提交的)
ppipevalue:環境變量的值(get方法提交的值是放在環境變量query_string中的)
isstdread:cgi程序是否需要從管道中讀取值

注意:post方法提交的值,在環境變量中有一個變量content_length是記錄post提交值的長度!
每個環境變量是用''/0''字符來隔開的!(query_string=name=66&password=77/0content_length=0/0/0)
當環境變量結尾應使用/0/0來結束!
千萬不用api:setenvironmentvariable()來設置環境變量,一但將post的值寫入管道傳給cgi程序,那用這個api函數設置的環境變量會丟失.



ansistring cgiscriptrun(ansistring cgifilename,ansistring ppostvalue,char *ppipevalue,bool isstdread){

handle hprocess,hwrite,hread, //進程句柄,管道寫句柄,管道讀句柄
security_attributes sa, //安全性結構
startupinfo mysi, //子進程窗口屬性結構
process_information mypi, //子進程信息
bool btest, //api是否調用成功

//填充安全性結構使句柄被繼承
sa.nlength=sizeof(security_attributes),
sa.lpsecuritydescriptor=null,
sa.binherithandle=true,

btest=createpipe(&hread,&hwrite,&sa,0), //創建管道

if(!btest){
return "",
}

//填充進程啟動信息
memset(&mysi,0,sizeof(startupinfo)),
mysi.cb=sizeof(startupinfo),
mysi.dwflags=startf_usestdhandles,

if(!isstdread)
//如果cgi(或php程序)不要從pipe中取值(用了get方法),則使用標準輸入
mysi.hstdinput=getstdhandle(std_input_handle),
else
//則使用從管道中讀
mysi.hstdinput=hread,
mysi.hstdoutput=hwrite,//cgi程序運行結束后,會將結果送給標準輸出(屏幕),在這里告訴cgi讓它把
//結果送出個建立的管道中
mysi.hstderror=hwrite, //cgi程序出錯,將出錯信息改從管道中輸出,(也就是向管道中寫進信息)

//創建子進程
btest=createprocess(null,
cgifilename.c_str(),null,
null,true,//true為讓這個進程繼承上面設置的一些輸入輸出信息
detached_process,
(lpvoid)ppipevalue,null,&mysi,&mypi),
//(lpvoid)ppipevalue ---傳的環境變量

if(btest)hprocess=mypi.hprocess,
else return"",

if(isstdread){
if(btest){
closehandle(mypi.hthread),
dword dwwritten,
bool breturn,

char *g=ppostvalue.c_str(),
//將提交的值寫進管道
breturn=writefile(hwrite,g,strlen(g),&dwwritten,null),
if(!breturn)return "",
}

if(!btest)return "",
//等待cgi程序執行完畢
waitforsingleobject(hprocess,wait_abandoned),
}

//一定要關閉管道的讀句柄
closehandle(hwrite),

char readbuf[100],
dword bytesread=0,

ansistring cgiout="",
//上面的cgi程序執行完畢后已經將結果寫進管道了,現在只要讀出來就可以了!
while(readfile(hread,readbuf,100,&bytesread,null)){
readbuf[bytesread]=''/0'',
cgiout=cgiout+ansistring(readbuf),
}

closehandle(hread),
closehandle(hprocess),

//返回執行結果用socket發送個用戶!
return cgiout,

}

cgi程序是從標準輸入中讀數據,輸出給標準輸出!
這里用了管道,在自己的程序中,建立pipe,讓cgi改從pipe中讀數據或從pipe中輸出運行結果!
如果你的cgi程序中使用了文件操作!
如:打開文件,將文內容輸出!
注意這里的文件路徑請使用絕對路徑,如果要用相對路徑的話,它的參考路徑為你這個應用程序所在路徑,而不是cgi的路徑

[email protected]



標題: 在linux上使用bind建立dns服務器 [刪除]
作者: thomas nooning  分類: linux  關鍵字: dns  
正文:
作者: thomas nooning, techrepublic
日期: 2001年09月19日

盡管linux在桌面計算的世界中還沒有取得引人注目的進展,但作為網絡服務器它已經小有名氣了。由于其出色的可靠性,我們可以放心地在linux上運行當今internet時代所必需的各種重要服務程序。由此,linux最普遍的一些用途包括用作郵件服務器、web服務器以及dns服務器。

下面我們將研究怎樣在red hat linux上使用bind建立一個dns服務器。bind(berkeley internet name domain)是一個在unix/linux系統上實現的域名解析服務軟件包。我們將學習在linux上建立和運行一個dns服務器所需的安裝、初始配置以及系統設置等步驟。

下載、安裝、配置<a href=http://www.linuxbyte.net/showsoftd.php?id=224 class=red target=_blank>bind</a>

下載和安裝<a href=http://www.linuxbyte.net/showsoftd.php?id=224 class=red target=_blank>bind</a>
你可以在www.isc.org/products/bind/下載bind的源碼包。最新的版本是9.1.3(寫這篇文章時),同時還可以下載支持信息和faq。

在本文中我們用red hat作為示例,所以你也許希望使用bind的rpm版本,可以通過搜索www.rpmfind.net找到它,因為使用rpm形式的發行包是安裝bind最簡便的方法。下載了bind的rpm之后,比如bind-9.1.0-10.i386.rpm,需要以超級用戶的身份執行rpm -ivh bind-9.1.0-10.i386.rpm命令。在rpm安裝bind時要注意檢查任何能夠導致安裝失敗的缺失的依賴關系。

如果你更愿意從源碼包安裝的話,在下載如bind-9.1.3.tar.gz這樣的文件之后需要以超級用戶身份運行tar xvfz bind-9.1.3.tar.gz命令對它進行解壓。就本例而言會生成一個名為bind-9.1.3的目錄,它包含了進行安裝所必需的所有文件。下一步,進入這個新創建的目錄然后執行./configure命令,在腳本程序完成所有配置工作后,運行make,接著運行make install完成安裝過程。現在在你的系統中應該已經安裝好了基本配置的bind,接下來要根據需要對它進行調整。

配置bind
當系統中安裝好bind之后,你就可以把它配置成多種方式。最常用的兩種之一是使用isp類型的設置,dns服務器接受并解析來自任何人的請求(或者一組預先定義的用戶);另一種是web主機方式,服務器只解析對服務域名的請求。當服務器的用途改變時,你也可以隨時改變配置的類型。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尚志市| 临湘市| 望奎县| 滦平县| 九龙城区| 汾西县| 伊吾县| 曲沃县| 崇阳县| 多伦县| 白城市| 牟定县| 鹤壁市| 淮阳县| 揭东县| 万山特区| 东丽区| 子长县| 定远县| 云龙县| 宜兰市| 常山县| 景洪市| 敖汉旗| 双牌县| 靖边县| 江华| 吴桥县| 巴林右旗| 九龙城区| 聂荣县| 明溪县| 康平县| 板桥市| 上栗县| 洱源县| 云浮市| 城步| 灌阳县| 广饶县| 文昌市|