cgi格式的文件是HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上。絕大多數(shù)的cgi格式的程序被用來(lái)解釋處理杰自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器。cgi程序使網(wǎng)頁(yè)具有交互功能。
cgi文件怎么打開(kāi)?
可以用記事本類(lèi)的文字編輯工具打開(kāi)。[最好不要用DW等網(wǎng)頁(yè)編輯軟件打開(kāi),因?yàn)樗鼈儠?huì)自動(dòng)添加代碼。]改文件屬性需在服務(wù)器上改,不過(guò)NT和LINUX/UNIX下是有區(qū)別的。
NT文件屬性值不用更改,IMAGE文件也可以放到CGI-BIN目錄內(nèi)LINUX/UNIX是要改屬性的,IMAGE方面的文件不能放到CGI-BIN目錄內(nèi),必須在CGI-BIN目錄外另建目錄,否則圖片無(wú)法顯示。
任務(wù)易為自由職業(yè)工作者尋找和分析任務(wù)項(xiàng)目,并構(gòu)建以任務(wù)為主題的社交平臺(tái)。
對(duì)一個(gè) CGI 程序,做的工作其實(shí)只有:從環(huán)境變量(environment variables)和標(biāo)準(zhǔn)輸入(standard input)中讀取數(shù)據(jù)、處理數(shù)據(jù)、向標(biāo)準(zhǔn)輸出(standard output)輸出數(shù)據(jù)。
環(huán)境變量中存儲(chǔ)的叫 Request Meta-Variables,也就是諸如 QUERY_STRING、PATH_INFO 之類(lèi)的東西,這些是由 Web Server 通過(guò)環(huán)境變量傳遞給 CGI 程序的,CGI 程序也是從環(huán)境變量中讀取的。
標(biāo)準(zhǔn)輸入中存放的往往是用戶(hù)通過(guò) PUTS 或者 POST 提交的數(shù)據(jù),這些數(shù)據(jù)也是由 Web Server 傳過(guò)來(lái)的。
就比如,我們剛學(xué) C 語(yǔ)言時(shí)寫(xiě)的 Hello World,也可以作為一個(gè)合法的 CGI 程序。
現(xiàn)在用 CGI 的已經(jīng)很少了,因?yàn)槊總€(gè) CGI 進(jìn)程只處理一個(gè)請(qǐng)求,換句話說(shuō),每個(gè)請(qǐng)求都需要?jiǎng)?chuàng)建一個(gè) CGI 進(jìn)程處理,CGI 程序處理完畢后就退出了。
FastCGI 正是對(duì) CGI 的改進(jìn),而且改進(jìn)了不是一點(diǎn)點(diǎn)。
從總體上看,一個(gè) FastCGI 進(jìn)程可以處理若干請(qǐng)求(一般 FastCGI 進(jìn)程是駐留著的,但不排除 IIS 之類(lèi)的 Web Server 限制其空閑時(shí)間,在一段時(shí)間內(nèi)沒(méi)有請(qǐng)求就自動(dòng)退出的可能),Web Server 或者 fpm 會(huì)控制 FastCGI 進(jìn)程的數(shù)量。
細(xì)節(jié)方面,F(xiàn)astCGI 是一套協(xié)議,不再是通過(guò)簡(jiǎn)單的環(huán)境變量、標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出來(lái)接收和傳遞數(shù)據(jù)了。一般來(lái)說(shuō),F(xiàn)astCGI 用 TCP 或者命名管道(Named Pipe)傳輸數(shù)據(jù)。
現(xiàn)在絕大多數(shù) PHP 網(wǎng)站都是在用 FastCGI 的。
因此,這個(gè)問(wèn)題的答案取決于題主對(duì) CGI 的理解。
CGI 的意思是啥?不是一種語(yǔ)言,也不是一種技術(shù),而是一種模式
搜索一下CGI的定義
Common Gateway Interface,簡(jiǎn)稱(chēng)CGI。在物理上是一段程序,運(yùn)行在服務(wù)器上,提供同客戶(hù)端 HTML頁(yè)面的接口
“通用網(wǎng)關(guān)接口”,這就是CGI的中文意思。也沒(méi)人規(guī)定CGI一定是用PERL寫(xiě)的。
換句話,只要是提供HTML的服務(wù)器端程序都可以叫CGI,APS、PHP、JSP這些都是,你用C語(yǔ)言寫(xiě)一個(gè)可以提供HTML的服務(wù)器端EXE文件,也叫CGI。
不知道我的回答是否明確,希望能對(duì)你有所幫助。
C++課設(shè)并沒(méi)有限制一定使用MFC 所以我們組一直致力于尋找更好的方案解決界面美觀度的問(wèn)題(有種更好的方法是利用c#寫(xiě)界面這樣可以和程序分離開(kāi) 但當(dāng)時(shí)選題的時(shí)候我們并不知道這種方法)
所以選擇了WEB應(yīng)用(c/s模式) 利用C++作為服務(wù)器端語(yǔ)言,利用古老的CGI技術(shù)進(jìn)行交互。
由于CGI的不方便性 該技術(shù)早已被ASP等技術(shù)取代 所以請(qǐng)大家繞行 本文的目的在于那些誤入CGI歧途的人一個(gè)出坑的道路 并且證明CGI還是能行得通的
****************************************************************************************************************
CGI的基本原理就不向大家介紹了 我們的項(xiàng)目利用AJAX技術(shù)向后臺(tái)請(qǐng)求數(shù)據(jù) 后臺(tái)利用ADO向數(shù)據(jù)庫(kù)讀寫(xiě)數(shù)據(jù) 然后直接COUT給前臺(tái)
1.注意編碼問(wèn)題!
首先是漢字在網(wǎng)絡(luò)傳輸時(shí)的變化 前臺(tái)向后臺(tái)傳的時(shí)候會(huì)自動(dòng)轉(zhuǎn)換成UTF-8(URL)格式的編碼 后臺(tái)需要先解碼再使用這些數(shù)據(jù)
其次 數(shù)據(jù)庫(kù)與cgi程序之間有時(shí)需要轉(zhuǎn)碼
在線編碼轉(zhuǎn)換這個(gè)網(wǎng)站可能會(huì)在編碼問(wèn)題上幫助你
2.動(dòng)態(tài)sql
利用win32控制臺(tái)程序 向數(shù)據(jù)庫(kù)寫(xiě)入數(shù)據(jù) 需要用到動(dòng)態(tài)sql 這個(gè)問(wèn)題需要字符串格式的統(tǒng)一 所以會(huì)花一點(diǎn)功夫
注意APACHE的服務(wù)器不支持ADO的方式 所以請(qǐng)使用IIS服務(wù)器
3.不要在cgi程序里加入例如system("pause")這類(lèi)的語(yǔ)句 會(huì)導(dǎo)致cgi程序不結(jié)束 無(wú)法返回給前臺(tái)數(shù)據(jù)(響應(yīng)超時(shí))
造成服務(wù)器內(nèi)存不足 會(huì)報(bào)w3wp.exe錯(cuò)誤 這時(shí)應(yīng)該重啟服務(wù)器 刪掉相關(guān)語(yǔ)句
4.SESSION登錄控制 CGI可以通過(guò)環(huán)境變量設(shè)置COOKIE 但是在AJAX情況下不適用 所以請(qǐng)利用JAVASCRIPT設(shè)置
cgi是一個(gè)web server與cgi程序(這里可以理解為是php解釋器)之間進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,保證了傳遞的是標(biāo)準(zhǔn)數(shù)據(jù)。
php-cgi是php解釋器,就是上文提到的cgi程序。
Fastcgi是用來(lái)提高cgi程序(php-cgi)性能的方案/協(xié)議。
cgi程序的性能問(wèn)題在哪呢?"PHP解析器會(huì)解析php.ini文件,初始化執(zhí)行環(huán)境",就是這里了。標(biāo)準(zhǔn)的CGI對(duì)每個(gè)請(qǐng)求都會(huì)執(zhí)行這些步驟,所以處理的時(shí)間會(huì)比較長(zhǎng)。
Fastcgi會(huì)先啟一個(gè)master,解析配置文件,初始化執(zhí)行環(huán)境,然后再啟動(dòng)多個(gè)worker。當(dāng)請(qǐng)求過(guò)來(lái)時(shí),master會(huì)傳遞給一個(gè)worker,然后立即可以接受下一個(gè)請(qǐng)求。這樣就避免了重復(fù)勞動(dòng),效率自然提高。而且當(dāng)worker不夠用時(shí),master可以根據(jù)配置預(yù)先啟動(dòng)幾個(gè)worker等著;當(dāng)然空閑worker太多時(shí),也會(huì)停掉一些,這樣就提高了性能,也節(jié)約了資源。這就是Fastcgi的對(duì)進(jìn)程的管理。
上文提到了Fastcgi只是一個(gè)方案或者協(xié)議,那么php-fpm就是這個(gè)實(shí)現(xiàn)了Fastcgi的程序,也就是說(shuō),上文所描述的進(jìn)程分配和管理是FPM來(lái)做的。官方對(duì)FPM的解釋是 Fastcgi Process Manager(Fastcgi 進(jìn)程管理器) 。
PHP對(duì)并發(fā)訪問(wèn)的處理
PHP從代碼級(jí)別來(lái)講不支持多線程操作,不能像Java、C#等語(yǔ)言一樣可以編寫(xiě)多線程代碼。但多線程和并發(fā)沒(méi)有直接關(guān)系,多線程只是代碼被運(yùn)行時(shí)在同一時(shí)間同時(shí)執(zhí)行多個(gè)線程任務(wù),來(lái)提高服務(wù)器CPU的利用率,提高代碼效率。但php是可以多進(jìn)程執(zhí)行的,上文所述的FPM進(jìn)程管理機(jī)制就是多進(jìn)程單線程的,有效提高了并發(fā)訪問(wèn)的響應(yīng)效率。