php-cgi.exe quits after exactly 500 hits

前端 未结 4 1878
半阙折子戏
半阙折子戏 2020-12-25 10:31

For the life of me, I can\'t figure this out.

This is my development machine setup:

Windows 7 Home Premium 64 bit,
Webserver: NGINX 1.3.6 c:\\users\\user

相关标签:
4条回答
  • 2020-12-25 10:58

    If you add

    SET PHP_FCGI_CHILDREN=1
    

    to the command file that launches the php-cgi.exe, it fixed it.

    You can add more children if you want, it depends of your need.

    0 讨论(0)
  • 2020-12-25 11:01

    The selected answer works, but doesn't allow the CGI server to shut down every so often (after 500 hits in the OPs case).

    Like the OP and others mentioned, this shutdown is necessary in a production environment to curtail memory leaks.

    In Windows, another solution is to create a batch file that looks like this:

    :start
        php-cgi -b 127.0.0.1:9000
        goto start
    

    This will allow the shutdown that was designed to occur, and will almost immediately start php-cgi again.

    0 讨论(0)
  • 2020-12-25 11:01

    unvisible EXE file that will LOOP-RUN php-cgi.exe with passing it own command-line params, can be easily compiled in, for example, ms-VCpp6 (phpCgiExeLoop.exe ~28kb):

    #include <windows.h>
    #include <Shellapi.h>
    #include "stdio.h"
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,      int       nCmdShow)
    {   while (1)
        {   SHELLEXECUTEINFO shExInfo = {0};
            shExInfo.cbSize = sizeof(shExInfo);
            shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS;   shExInfo.hwnd = 0;
            shExInfo.lpVerb = "open";            // Operation to perform
            shExInfo.lpFile = "php-cgi.exe";     // Application to start    
            shExInfo.lpParameters = lpCmdLine;   // Additional parameters
            shExInfo.lpDirectory = 0;            shExInfo.nShow = SW_HIDE;
            shExInfo.hInstApp = 0;  
    
            if (ShellExecuteEx(&shExInfo))
            {   WaitForSingleObject(shExInfo.hProcess, INFINITE);
                CloseHandle(shExInfo.hProcess);
            }
        }
        return 0;
    }
    

    and running "phpCgiExeLoop -b 127.0.0.1:9000" instead of "php-cgi.exe -b 127.0.0.1:9000" ...to win-support php creators intention (avoiding possible memory-leaks).

    0 讨论(0)
  • 2020-12-25 11:05

    I finally figured it out. Maybe it was simple enough that I couldn't find the solution.

    Adding:

    SET PHP_FCGI_MAX_REQUESTS=0 
    

    to the command file that launches the php-cgi.exe fixed it. I guess it defaults (when not set) to 500 hits before FCGI is killed.

    Obviously, there are good reasons for this and as GargantuChet has suggested, settings things up correctly and letting the instances of PHP managed and auto-spawn is a better way to go...but for people who want a quick windows development environment, this can solve some problems.

    0 讨论(0)
提交回复
热议问题