#include #define MAX_CONTENT_LEN 1024
int main()
{
extern char **environ;
int nlen = 0;
int i;
char szContent[MAX_CONTENT_LEN];
char **penv;
char *req = NULL;
memset(szContent, 0, MAX_CONTENT_LEN);
printf("Content-type: text/html\n\n");
for ( penv = environ; *penv; penv++ )
printf("%s
", *penv);
if ( strcmp("POST", getenv("REQUEST_METHOD")) == 0 )
{
nlen = atoi(getenv("CONTENT_LENGTH"));
for (i = 0; i < nlen; i++ )
{
if ( i < MAX_CONTENT_LEN )
szContent[i] = fgetc(stdin);
else
break;
}
printf("
%s", szContent);
}
else
{
printf("
%s", getenv("QUERY_STRING"));
}
return 0;
}
在地址栏 http://localhost/testenv.htm
假设我们输入的用户名和密码分别为abcd和efgh,提交表单之后,在我的机器上显示的结果如下:
COMSPEC=C:\WINDOWS\system32\cmd.exe
CONTENT_LENGTH=31
CONTENT_TYPE=application/x-www-form-urlencoded
DOCUMENT_ROOT=d:/chateaurt4/www
HTTP_ACCEPT=text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET=gb2312,utf-8;q=0.7,*;q=0.7
HTTP_ACCEPT_ENCODING=gzip,deflate
HTTP_ACCEPT_LANGUAGE=zh-cn,zh;q=0.5
HTTP_CONNECTION=keep-alive
HTTP_HOST=localhost
HTTP_KEEP_ALIVE=300
HTTP_REFERER=http://localhost/testenv.htm
HTTP_USER_AGENT=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Microsoft
Visual Studio\Common\Tools\WinNT;D:\Microsoft Visual
Studio\Common\MSDev98\Bin;D:\Microsoft Visual
Studio\Common\Tools;D:\Microsoft Visual
Studio\VC98\bin;D:\AppServ\Apache2.2\bin;D:\AppServ\php5;D:\AppServ\MySQL\bin
REMOTE_ADDR=127.0.0.1
REMOTE_PORT=1644
SCRIPT_FILENAME=d:/chateaurt4/www/cgi-bin/env.cgi
SERVER_ADDR=127.0.0.1
SERVER_ADMIN=who@where.net
SERVER_NAME=localhost
SERVER_PORT=80
SERVER_SIGNATURE=Apache/1.3.33 Server at localhost Port 80
SERVER_SOFTWARE=Apache/1.3.33 (Win32)
SystemRoot=C:\WINDOWS
WINDIR=C:\WINDOWS
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=POST
QUERY_STRING=
REQUEST_URI=/cgi-bin/env.cgi
SCRIPT_NAME=/cgi-bin/env.cgi
usr=abcd&pwd=efgh&submit=Submit当然不同的机器,它输出的有些结果可能不一样。如果单纯为了输出环境变量,我们可以这样做:
#include int main (int argc, char **argv, char **envp)
{
char **var = envp;
while (*var)
printf ("%s \n",*var++);
return 0;
}
这里面得到的环境变量结果和CGI程序里面的结果差别比较大,因为一个是获得与web应用程序有关的环境变量,而一个获得的是系统的环境变量。