2017-02-14 1 views
0

meine nginx/conf.d/default.conf istFCGX_GetParam REQUEST_METHOD in Fenstern verwendet werden, können aber NULL zurück in 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; 
} 

}

mein Code wie diese, in den Fenstern kann sie erfolgreich eingesetzt werden , aber in linux kann ich nicht erhalten "char * method = FCGX_GetParam (" REQUEST_METHOD ", request.envp)", "Methode" zurück NULL, ich habe php-fpm installiert, was kann ich tun, wie lösen Dieses Problem? Sind einige Fehler in den Konfigurationen meines Nginx? Wer kann mir helfen? Tanks für alle lieben Klassenkameraden !!!

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; 
} 

Antwort

0

Die meisten (wenn nicht alle) nginx Distributionen kommen mit einer Datei, einschließlich genannt /etc/nginx/fastcgi_params die eine Reihe von fastcgi_param Aussagen enthält:

fastcgi_param REQUEST_METHOD $request_method; 

Entweder schließen, bevor Sie Ihre individuelle Anweisungen die Datei:

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; 
} 

Oder fügen Sie einfach die REQUEST_METHOD Definition Ihrer vorhandenen Liste.

Weitere Informationen finden Sie unter this document.

+0

Tanks für Ihre Antwort! Ich habe den Grund gefunden; nginx config vielleicht nicht genau, aber ich kann den Wert durch den Code in Linux wie bekommen: –

+0

Danke für Ihre Antwort !! Ich finde den Grund; Ich teste den neuen Code, der nicht in Windows verwendet werden kann, kann aber in Linux verwendet werden (ich weiß nicht warum), Code wie folgt: –

+0

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 fortfahren; \t \t} \t \t char * method = my_getenv ("REQUEST_METHOD"); \t \t char * pPathInfo = mein_getenv ("PATH_INFO"); \t \t ifobj-> SetServName (my_getenv ("SERVER_NAME")); \t \t \t Zeichen * pszReq = my_getenv ("QUERY_STRING"); \t \t char * remote_addr = mein_getenv ("REMOTE_ADDR"); \t} } –

Verwandte Themen