FCGX_GetParam REQUEST_METHOD可以在Windows中使用,但在Linux中返回NULL
FCGX_GetParam REQUEST_METHOD can used in windows but return NULL in linux
my nginx/conf.d/default.conf is
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
定义添加到现有列表中。
有关详细信息,请参阅此文档。
相关文章:
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 在linux上调试巨大的C++项目
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 当使用通配符和null指针调用函数时,对输出的说明
- c++方法参数只能在linux的发布模式下自行更改
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- C++ Linux 运行时basic_string::_M_construct null 无效错误
- FCGX_GetParam REQUEST_METHOD可以在Windows中使用,但在Linux中返回NULL
- 在Linux/GCC下,将NULL指针访问转换为C++异常
- 当文件存在时,Linux中的fopen(Lubuntu)会返回NULL
- 如何在c++和linux中将std::ostream重定向到文件或/dev/null