мой Nginx/conf.d/default.conf являетсяFCGX_GetParam REQUEST_METHOD может использоваться в окнах, но возвращать NULL в 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;
}
}
мой код, как это, в окнах могут быть успешно использованы , но в linux я не могу получить «char * method = FCGX_GetParam (« REQUEST_METHOD », request.envp)», «method» return 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 config, возможно, не совсем !, но я могу получить значение с помощью кода в Linux, например: –
Спасибо за ваш ответ! Я нахожу причину; Я тестирую новый код, который не может использоваться в Windows, но может использоваться в Linux (я не знаю почему), код выглядит следующим образом: –
int main() { \t CGIWorld * g_pTheWorld = новый 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} } –