我正在使用C處理CGI文件,該處理器只在請求方法爲POST時才執行操作。Howto get_env(REQUEST_METHOD)w/o錯誤500
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");
。錯誤是SIGSEGV。
當我從XAMPP服務器打開它時,CGI運行良好。但是,當我在與我不同的Ubuntu服務器上運行它時,會發生錯誤500。我嘗試將getenv("REQUEST_METHOD")
的值與NULL進行比較,並且gdb告訴我文件正常運行。但是,CGI文件無法在我的XAMPP服務器和其他服務器上正常運行,其中兩個顯示錯誤500. 我可以告訴你的是這些函數的內容頭設置。 count()和parse()函數的設置是恰當的,與當前的情況無關。 在此先感謝。
更新:如果用戶直接打開CGI文件,瀏覽器將重定向到另一個CGI文件。
它現在可以工作。非常感謝你。我會記住這一點。 –