mon nginx/conf.d/default.conf estFCGX_GetParam REQUEST_METHOD peut être utilisé dans les fenêtres, mais retour NULL dans 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;
}
}
mon code est comme ça, dans les fenêtres, il peut être utilisé avec succès , mais dans Linux je ne peux pas obtenir "char * méthode = FCGX_GetParam (" REQUEST_METHOD ", request.envp)", "méthode" retour NULL, j'ai installé php-fpm, que puis-je faire pour comment résoudre ce problème est quelques erreurs dans les configs de mon nginx? Qui peut m'aider? Réservoirs pour chaque chers camarades de classe !!!
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;
}
réservoirs pour votre réponse !! J'ai trouvé la raison; Nginx config peut-être pas exactement! mais je peux obtenir la valeur par le code dans Linux comme est: –
Merci pour votre réponse !! Je trouve la raison; Je teste le nouveau code qui ne peut pas être utilisé dans Windows mais peut être utilisé sous linux (je ne sais pas pourquoi), code comme ceci: –
int main() { \t CGIWorld * g_pTheWorld = new CGIWorld(); \t extern char ** environ; \t char ** initialEnv = environ; \t while (FCGI_Accept()> = 0) { \t \t \t CIfBase * IFOBJ = CIfFactory :: getIfObj(); \t \t if (IFOBJ == NULL) \t \t { \t \t \t LogError ("error_env_platform", ""); \t \t \t continuer; \t \t} \t \t char * = my_getenv méthode ("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} } –