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