參考:
還記得c語言main函式的完整宣告嗎?
int main(int argc, char **argv, char **envp);
這個就是c語言中main函式的完整宣告, argc表示引數個數,argv表示引數字串,而這個envp就表示環境變數字串。引數和環境變數都可以不止乙個,所以,用指向字串指標的指標來表示。
比如我們用c語言寫了乙個程式,執行在命令列下,帶有2個引數
c:> cpfile.exe c:\test.txt d:\test.txt
那麼這裡的
argc=3;
argv[0] = "cpfile.exe";
argv[1] = "c:\test.txt";
argv[2] = "d:\test.txt";
在c語言中的stdlib.h中有乙個
extern char **environ; 或者
extern char **_environ;的宣告
這個envp的引數實際上就是environ。
好,我們看看在cgi程式(其實就是乙個c語言程式)裡面怎麼列舉這些環境變數
先寫乙個html頁面:(當然也可以不要)
呈現效果如下:
cgi程式原始碼:
/* env.c */
#include #include #include int main()
else
printf("
string value: %s
", psz_content);
}return 0;
}
如果是fastcgi可以用以下**列印環境變數:
#include #include #include #include int main()
else
printf("
string value: %s
", psz_content); }}
return 0;
}
注意:
1、這裡使用fgetc函式從標準輸入讀資料,不能使用gets代替
2、fcgx中,頭和環境資訊在fcgx_request->envp中,不能用genenv獲取,要用fcgx_getparam獲取。
在位址列 http://localhost/testenv.htm
假設我們輸入的使用者名稱和密碼分別為abcd和efgh,提交表單之後,在我的機器上顯示的結果如下:
當然不同的機器,它輸出的有些結果可能不一樣。如果單純為了輸出環境變數,我們可以這樣做:
#include int main (int argc, char **argv, char **envp)
這裡面得到的環境變數結果和cgi程式裡面的結果差別比較大,因為乙個是獲得與web應用程式有關的環境變數,而乙個獲得的是系統的環境變數。 FastCgi 和Cgi的區別
cgi 1.fork and excute 每次來乙個請求,就fork出去乙個子程序,結束之後再關閉。來新請求還要重新fork子程序。fastcgi 可以理解為常駐型的cgi。使用了程序 執行緒池的概念 master程序,和眾多worker程序 每次來乙個請求時,只需要將socket長連線 包含環境...
CGI 和 FastCGI 協議的執行原理
在用php開發的過程中,我們常常使用nginx或者apache作為我們的web伺服器。但是php是如何與這些web伺服器通訊的呢?要談fastcgi就必須先說說cgi。那什麼是cgi?cgi協議同 http 協議一樣是乙個 應用層 協議,它的 功能 是為了解決 web 伺服器與 php 應用 或其他...
CGI 和 FastCGI 協議的執行原理
目錄深入fastcgi協議 web 伺服器和 fastcgi 互動過程 為什麼需要在訊息頭髮送 requestid 這個標識?php fpm 在用php開發的過程中,我們常常使用nginx或者apache作為我們的web伺服器。但是php是如何與這些web伺服器通訊的呢?要談fastcgi就必須先說...