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

これにより、誰かがこの問題と戦う時間を節約できることを願って、私は自分の質問に答えています。

これにかなりの時間を費やした結果、犯人はFcgidCmdOptionsvhost 構成で使用していたことがわかりました。定義されている場合、グローバル 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 に答える