cgi和fastcgi獲取所有環境變數(C語言)

2021-06-20 08:54:01 字數 2690 閱讀 1496

參考:

還記得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就必須先說...