2

我已经使用 mod_fcgid 在 Windows 上的 Apache 下设置了几个版本的 PHP。配置是这样的:

LoadModule fcgid_module modules/mod_fcgid.so

FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "c:/php/tmp"
FcgidInitialEnv TMP "c:/php/tmp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 600
FcgidConnectTimeout 600
FcgidProcessLifeTime 3600
FcgidMaxRequestsPerProcess 900 
FcgidMaxProcesses 10
FcgidMaxRequestLen 80131072
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000

然后是每个 vhost 指令中的特定 fcgi 处理程序:

<Virtualhost *:80>
    VirtualDocumentRoot "e:/hosts/example"
    ServerName example.local
    # location of php.ini
    FcgidCmdOptions c:/php/php5.5.12/php-cgi.exe InitialEnv PHPRC="c:/php/php5.5.12/"
    FcgidWrapper "c:/php/php5.5.12/php-cgi.exe" .php
</Virtualhost>

<Virtualhost *:81>
    VirtualDocumentRoot "e:/hosts/example"
    ServerName example.local
    # location of php.ini
    FcgidCmdOptions c:/php/php7.0.12/php-cgi.exe InitialEnv PHPRC="c:/php/php5.5.12/"
    FcgidWrapper "c:/php/php7.0.12/php-cgi.exe" .php
</Virtualhost>

这种方式http://example.local/适用于 PHP 5.5,但http://example.local:81/提供相同的代码,但适用于 PHP 7.0。在同一系统上测试多个版本的 PHP 非常方便。

但是我在大约 40-60 秒后不断收到 fcgi 超时,这使我无法有效地使用 xdebug。

我已经检查了关于 SO 的类似问题的数量,其中大多数正确建议设置更高的FcgidIOTimeout选项值,但由于未知原因,这对我的系统绝对没有影响。

4

1 回答 1

2

我正在回答我自己的问题,希望这可以节省一些人解决这个问题的时间。

在这方面花了很多时间后,我发现罪魁祸首是FcgidCmdOptions在 vhost 配置中使用。如果已定义,则全局 fcgid 选项将被忽略!所以,FcgidIOTimeout我不得不IOTimeoutFcgidCmdOptions.

最终配置如下:

<Virtualhost *:80>
    VirtualDocumentRoot "e:/hosts/example"
    ServerName example.local
    FcgidCmdOptions c:php/php5.5.12/php-cgi.exe \
            InitialEnv PHPRC="c:php/php5.5.12/" \
            InitialEnv PHP_FCGI_MAX_REQUESTS=1000 \
            IOTimeout 3600 \
            ConnectTimeout 3600 \
            MaxProcessLifeTime 7200 \
            IdleTimeout 3600 \
            MaxRequestsPerProcess 900
    FcgidWrapper "c:php/php5.5.12/php-cgi.exe" .php
</Virtualhost>

<Virtualhost *:81>
    VirtualDocumentRoot "e:/hosts/example"
    ServerName example.local
    FcgidCmdOptions c:php/php7.0.12/php7-cgi.exe\
            InitialEnv PHPRC="c:php/php7.0.12/" \
            InitialEnv PHP_FCGI_MAX_REQUESTS=1000 \
            IOTimeout 3600 \
            ConnectTimeout 3600 \
            MaxProcessLifeTime 7200 \
            IdleTimeout 3600 \
            MaxRequestsPerProcess 900
    FcgidWrapper "c:php/php7.0.12/php7-cgi.exe" .php
</Virtualhost>
于 2016-10-21T15:44:08.650 回答