我在Windows上使用mod_fcgid在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
选项值,但由于未知原因,这对我的系统完全没有影响。
答案 0 :(得分:2)
我回答了自己的问题,希望这可以节省一些时间来解决这个问题。
花了很多时间在这上面,我发现我们的罪魁祸首是在vhost配置中使用 FcgidCmdOptions
。如果已定义,全局fcgid选项将被忽略!因此,我必须在FcgidIOTimeout
中设置IOTimeout
选项,而不是设置FcgidCmdOptions
。
最终配置如下:
<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>