envp
不是标准的(好吧,无论如何都不是 ISO C 或 C++ 标准,尽管 POSIX 可能有一些东西)。
但是,envp
它的格式与argv
escept 几乎相同,它没有控制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;
}
CGI的Wikipedia 条目提供了更多详细信息,希望不会像冗长的 RFC 那样用太多信息淹没您。
复制相关内容以使此答案自成一体:
- 服务器特定变量:
- SERVER_SOFTWARE — HTTP 服务器的名称/版本。
- SERVER_NAME — 服务器的主机名,可以是点十进制 IP 地址。
- GATEWAY_INTERFACE — CGI/版本。
- 请求特定变量:
- 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 application/x-www-form-urlencoded 定义的 GET 方法传输的表单数据时,可能由 *name=value 对组成,用 & 符号分隔(例如 var1=val1&var2=val2…)。
- REMOTE_HOST — 客户端的主机名,如果服务器没有执行此类查找,则取消设置。
- REMOTE_ADDR — 客户端的 IP 地址(点十进制)。
- AUTH_TYPE — 标识类型(如果适用)。
- REMOTE_USER 用于某些 AUTH_TYPE。
- REMOTE_IDENT — 仅在服务器执行此类查找时查看 ident。
- CONTENT_TYPE — 如果使用 PUT 或 POST 方法,输入数据的 MIME 类型,通过 HTTP 标头提供。
- 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
其中键不区分大小写,值跟在冒号后面。