当前位置: 技术问答>linux和unix
web服务器给设置环境变量,cgi无法得到
来源: 互联网 发布时间:2017-04-13
本文导语: 本机测试 127.0.0.1/cgi-bin/adder.cgi?10&20 服务器进行 HTTP响应的部分代码 sprintf(buf, "HTTP/1.0 200 okrn"); rio_writen(fd, buf, strlen(buf)); sprintf(buf, "Server:Tiny web serverrn"); rio_writen(fd, buf, strlen(b...
本机测试 127.0.0.1/cgi-bin/adder.cgi?10&20
服务器进行 HTTP响应的部分代码
cgi 获取 环境变量的代码
下面为返回报文
HTTP/1.0 200 ok
Server:Tiny web server
cgiargs:10&20
Content-length:114
Content-type:text/html
Welcome to add.com:The Internet addition portal.
服务器进行 HTTP响应的部分代码
sprintf(buf, "HTTP/1.0 200 okrn");
rio_writen(fd, buf, strlen(buf));
sprintf(buf, "Server:Tiny web serverrn");
rio_writen(fd, buf, strlen(buf));
sprintf(buf, "cgiargs:%srn",cgiargs);
rio_writen(fd, buf, strlen(buf));
if(fork() == 0)
{
//set cgi vars here
setenv("QUERY_STRING", cgiargs, 1);
dup2(fd, STDOUT_FILENO);
execve(filename, NULL, NULL);
}
wait(NULL)
cgi 获取 环境变量的代码
char *buf, *p;
char arg1[10], arg2[10];
char content[MAXLINE];
int n1 = 0, n2 = 0;
int flag = 0;
if((buf = getenv("QUERY_STRING")) != NULL)
{
p = strchr(buf, '&');
*p = '';
strcpy(arg1, buf);
strcpy(arg2, p+1);
n1 = atoi(arg1);
n2 = atoi(arg2);
flag = 1;
}
下面为返回报文
HTTP/1.0 200 ok
Server:Tiny web server
cgiargs:10&20
Content-length:114
Content-type:text/html
Welcome to add.com:The Internet addition portal.
The answer is :0 + 0 = 0
Thanks for visiting!
flag = 0
Connection closed by foreign host.
能看出cgiargs 解析没有错误。
通过随后对flag 的判断,发现buf 始终为Null,即未取到环境变量,不知道到 哪块出问题了?
还请大神指导下,谢谢
|
你应该使用execv/execvp, 让子进程直接继承父进程的环境变量,这样setenv的才能继承下去。