6

对于我的生活,我无法弄清楚这一点。

这是我的开发机器设置:

Windows 7 家庭高级版 64 位,
网络服务器:NGINX 1.3.6 c:\users\user_name\devel\nginx
PHP:5.4.7 c:\users\user_name\devel\nginx\php5

一切正常,只是在 500 次点击后,我的 php-cgi.exe 意外退出。没有错误日志,没有事件,什么都没有。它只是在 500 次点击后死亡……每一次。我还没有在网上找到一个单一的信息来源来帮助我解决这个问题。所有配置似乎都有效且良好。这发生在两台不同的机器(我的开发桌面和我的笔记本)上。我尝试了不同的 nginx.conf 和 php.ini 文件……还是一样。

我只需要更好地了解如何进行调试。有什么建议么?

4

4 回答 4

15

我终于弄明白了。也许它很简单,我找不到解决方案。

添加:

SET PHP_FCGI_MAX_REQUESTS=0 

到启动 php-cgi.exe 的命令文件修复它。我猜它在 FCGI 被杀死之前默认(未设置时)为 500 次点击。

显然,这是有充分理由的,正如 GargantuChet 所建议的那样,正确设置并让 PHP 托管和自动生成实例是一个更好的方法......但对于想要快速 Windows 开发环境的人来说,这个可以解决一些问题。

于 2012-10-22T22:01:31.667 回答
6

所选答案有效,但不允许 CGI 服务器每隔一段时间关闭一次(在 OP 情况下点击 500 次后)。

就像提到的 OP 和其他人一样,在生产环境中,这种关闭对于减少内存泄漏是必要的。

在 Windows 中,另一种解决方案是创建一个如下所示的批处理文件:

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

这将允许发生设计的关闭,并且几乎会立即再次启动 php-cgi。

于 2015-12-24T22:19:26.540 回答
1

不可见的 EXE 文件,它将通过传递它自己的命令行参数循环运行 php-cgi.exe,可以很容易地编译为例如 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;
}

并运行“phpCgiExeLoop -b 127.0.0.1:9000”而不是“php-cgi.exe -b 127.0.0.1:9000”......以赢得支持 php 创建者的意图(避免可能的内存泄漏)。

于 2012-10-30T21:57:31.413 回答
1

如果你添加

SET PHP_FCGI_CHILDREN=1

到启动 php-cgi.exe 的命令文件,它修复了它。

如果你愿意,你可以添加更多的孩子,这取决于你的需要。

于 2019-05-29T14:39:01.837 回答