0
返回NULL
我的nginx/conf.d/default.conf是FCGX_GetParam REQUEST_METHOD可以用在Windows,但在Linux
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 *方法= 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的配置可能不完全!但我可以通過代碼在linux中得到的價值是: –
感謝您的回答!!我找到原因;我測試了不能在windows中使用,但可以在Linux中使用的新代碼(我不知道爲什麼),代碼如下: –
int main() { \t CGIWorld * g_pTheWorld = new CGIWorld(); \t extern char ** environ; \t char ** initialEnv = environ; \t而(FCGI_Accept將()> = 0) \t { \t \t CIfBase * ifobj = CIfFactory :: getIfObj(); \t \t如果(ifobj == NULL) \t \t { \t \t \t LOGERROR( 「error_env_platform」, 「」); \t \t \t繼續; \t \t} \t \t字符*方法= my_getenv( 「REQUEST_METHOD」); \t \t char * pPathInfo = my_getenv(「PATH_INFO」); \t \t ifobj-> SetServName(my_getenv(「SERVER_NAME」)); \t \t \t char * pszReq = my_getenv(「QUERY_STRING」); \t \t char * remote_addr = my_getenv(「REMOTE_ADDR」); \t} } –