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