gpt4 book ai didi

c++ - FCGX_GetParam REQUEST_METHOD 可以在 windows 中使用,但在 linux 中返回 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:54 24 4
gpt4 key购买 nike

我的nginx/conf.d/default.conf是

server {

listen 80;
server_name 127.0.0.1;

#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

rewrite ^(.*)(?i)charge(.*)$ $1charge$2 break;
rewrite ^(.*)(?i)login(.*)$ $1login$2 break;
rewrite ^(.*)(?i)plat_api(.*)$ $1plat_api$2 break;


location ~charge$ {
root /data/servers/NewGame_Server/fcgi_bin;
fastcgi_pass 127.0.0.1:9991;
fastcgi_index index.cgi;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.cgi)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}

fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}

我的代码是这样的,在windows下可以成功使用,但是在linux下我无法获得“char * method = FCGX_GetParam(“REQUEST_METHOD”,request.envp)”,“方法”返回NULL,我已经安装了php-fpm,我能做什么解决这个问题?我的 nginx 配置有问题吗?谁能帮我?为每一位亲爱的同学加油!!!

int main()
{

FCGX_Request& request = g_pTheWorld->GetFCGX_Request();

streambuf * cin_streambuf = cin.rdbuf();
streambuf * cout_streambuf = cout.rdbuf();
streambuf * cerr_streambuf = cerr.rdbuf();

FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
while (FCGX_Accept_r(&request) == 0)
{
CIfBase* ifobj = CIfFactory::getIfObj();
if (ifobj == NULL)
{
LogError("error_env_platform", "");
continue;
}

// Note that the default bufsize (0) will cause the use of iostream
// methods that require positioning (such as peek(), seek(),
// unget() and putback()) to fail (in favour of more efficient IO).
fcgi_streambuf cin_fcgi_streambuf(request.in);
fcgi_streambuf cout_fcgi_streambuf(request.out);
fcgi_streambuf cerr_fcgi_streambuf(request.err);

#if HAVE_IOSTREAM_WITHASSIGN_STREAMBUF
cin = &cin_fcgi_streambuf;
cout = &cout_fcgi_streambuf;
cerr = &cerr_fcgi_streambuf;
#else
cin.rdbuf(&cin_fcgi_streambuf);
cout.rdbuf(&cout_fcgi_streambuf);
cerr.rdbuf(&cerr_fcgi_streambuf);
#endif

//setvbuf(stdin, NULL, _IONBF, 0); /*关闭stdin的缓冲*/

char * method = FCGX_GetParam("REQUEST_METHOD", request.envp);
if (method == NULL)
{
LogError("REQUEST_METHOD","error : size = 0");
continue;
}

string intput;
if (strcmp(method, "GET") == 0)
{
intput = FCGX_GetParam("QUERY_STRING", request.envp);
}
else if (strcmp(method, "POST") == 0)
{
intput = get_request_content(request);
}

FCGX_Finish_r(&request);

}

#if HAVE_IOSTREAM_WITHASSIGN_STREAMBUF
cin = cin_streambuf;
cout = cout_streambuf;
cerr = cerr_streambuf;
#else
cin.rdbuf(cin_streambuf);
cout.rdbuf(cout_streambuf);
cerr.rdbuf(cerr_streambuf);
#endif

delete g_pTheWorld;

return 0;
}

最佳答案

大多数(如果不是全部)nginx 发行版都带有一个名为 /etc/nginx/fastcgi_params 的文件,其中包含许多 fastcgi_param 语句,包括:

fastcgi_param   REQUEST_METHOD   $request_method;

要么,在您的自定义语句之前包含该文件:

location ~charge$  {
...
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}

或者只是将 REQUEST_METHOD 定义添加到您现有的列表中。

参见 this document了解更多。

关于c++ - FCGX_GetParam REQUEST_METHOD 可以在 windows 中使用,但在 linux 中返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42221370/

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