gpt4 book ai didi

html - 如何获得没有 ERROR 500 的 env(REQUEST_METHOD)

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:06 31 4
gpt4 key购买 nike

我正在使用 C 处理一个 CGI 文件,该文件仅在请求方法为 POST 时才执行操作。

int main(void)
{
char *method_str = getenv("REQUEST_METHOD");
int iMethod = strcmp(method_str,"POST");
int tid = 0;
int own_id = 0;
char key[16] = "\0";


if (iMethod == -1) {
puts("Location:start.cgi\n\n");
} else if (iMethod == 0) {
char *data = getenv("CONTENT_LENGTH");
int size = atoi(data);
char *buffer = malloc((size+1)*sizeof(char));
fgets(buffer,atoi(data)+1,stdin);
int counter = count(buffer);
char **names = malloc(counter*sizeof(char *));
char **values = malloc(counter*sizeof(char *));
parse(buffer, names, values);
int isDel = strcmp(*(values+1),"Back to Start");
if (isDel == 0) startpage(atoi(*values));
else {
own_id = atoi(*values);
sprintf(key,"%s",*(values+1));
int stat = login_status(own_id,key);
if (stat == -1) {
startpage(0);
} else userpage(own_id);
}
free_mallocs(names,values,counter);
free(buffer);

}
free(method_str);

return 0;
}

在 gdb 中运行 CGI 文件告诉我问题出在以下行:

int iMethod = strcmp(method_str,"POST");. The error is SIGSEGV.

当我从 XAMPP 服务器打开 CGI 时,它运行良好。但是,当我在不同于我的 Ubuntu 服务器上运行它时,会出现错误 500。我尝试将 getenv("REQUEST_METHOD") 的值与 NULL 进行比较,gdb 告诉我该文件运行正常。但是,CGI 文件无法在我的 XAMPP 服务器和另一台服务器上正常运行,两台服务器都显示错误 500。我可以告诉您的是,这些函数设置了它们的内容 header 。函数 count() 和 parse() 被适本地设置并且独立于手头的情况。提前致谢。

更新:如果用户直接打开CGI文件,浏览器会重定向到另一个CGI文件。

最佳答案

我不确定到底你在问什么,但是getenv()如果环境变量不存在,则返回 NULL。取消引用 NULL 指针是未定义的行为,传递给 strcmp() 的指针将被取消引用。因此,将 NULL 作为参数传递给 strcmp() 是未定义的行为,这可能是段错误(并且是此处的可能原因)。使用 NULL 检查 method_str 来保护对 strcmp() 的调用。

不知道为什么环境变量不存在

关于html - 如何获得没有 ERROR 500 的 env(REQUEST_METHOD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509617/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com