envp
不是標準的(好吧,無論如何,不是ISO C或C++標準,儘管POSIX可能有它的東西)。
但是,envp
幾乎與argv
格式相同,但它沒有控制argc
來限制它。
每個envp[x]
會的形式"key=value"
其中key
是環境變量名和value
是它的價值,令人驚訝的是:-)
您應該處理的元素順序,直到你得到一個NULL指針,東西像:
#include <stdio.h>
int main (int argc, char *argv[], char *envp[]) {
int i = 0;
while (envp[i] != NULL)
printf ("[%s]\n", envp[i++]);
return 0;
}
的Wikipedia entry for CGI給出進一步的細節,希望不淹沒你會喜歡一個詳細的RFC太多的信息。
複製有關的東西,使這個答案自足:
- 服務器特定的變量:
- SERVER_SOFTWARE - 名稱/版本HTTP服務器。
- SERVER_NAME - 服務器的主機名,可能是點十進制IP地址。
- GATEWAY_INTERFACE - CGI/version。
- 請求特定的變量:
- SERVER_PROTOCOL - HTTP /版本。
- SERVER_PORT - TCP端口(十進制)。
- REQUEST_METHOD - HTTP方法的名稱(參見上文)。
- PATH_INFO - 路徑後綴,如果在程序名稱和斜槓後附加到URL。
- PATH_TRANSLATED - 如果存在PATH_INFO,則與服務器假定的相應的完整路徑。
- SCRIPT_NAME - 程序的相對路徑,如/cgi-bin/script.cgi。
- QUERY_STRING - URL之後的部分?字符。當用於提交通過HTML應用程序/ x-www-form-urlencoded定義的GET方法傳輸的表單數據時,可能由*名稱=值對組成(如var1 = val1 & var2 = val2 ...)。
- REMOTE_HOST - 客戶端的主機名,如果服務器未執行此類查找,則取消設置。
- REMOTE_ADDR - 客戶端的IP地址(點分十進制)。
- AUTH_TYPE - 標識類型(如果適用)。
- REMOTE_USER用於某些AUTH_TYPE。
- REMOTE_IDENT - 僅在服務器執行此類查找時才能看到ident。
- CONTENT_TYPE - 如果使用PUT或POST方法(通過HTTP標頭提供),則輸入數據的MIME類型。
- CONTENT_LENGTH - 類似地,如果通過HTTP頭提供輸入數據的大小(十進制,以八位字節爲單位)。
- 用戶代理傳遞的變量(HTTP_ACCEPT,HTTP_ACCEPT_LANGUAGE,HTTP_USER_AGENT,HTTP_COOKIE和其他可能的變量)包含相應HTTP標頭的值,因此具有相同的含義。
除此之外的詳細程度,你可能會有尋找到RFC文檔,我害怕。在Google上搜索RFC3875應找到它。
具體而言,對於POST
,環境變量包含在請求的第一個空白行(引入消息正文的行)之前。它們的格式如下:
Content-Type: application/wonderful_app_by_pax
Content-Length: 314159
其中密鑰不區分大小寫,值在冒號後面。
RFC 3875:http://tools.ietf.org/html/rfc3875 – 2011-05-21 02:12:27