--> -->
Windowsの開発環境でPHP5と7を共存させる方法です。
WindowsのApache+PHPの組み合わせには、VCランタイムの問題が絡むので、PHP7はfirst-cgiで動作させて切り離してみました。
> php-cgi.exe -b 127.0.0.1:8073
LoadModule mime_module modules/mod_mime.so LoadModule proxy_module modules/mod_proxy.soローカル環境ではVirtualHostではなくaliasを使う場合が多いと思います。以下のように設定します。
Alias /hoge "C:\Users\fuga\Documents\html\hoge" <Directory "C:\Users\fuga\Documents\html\hoge"> ProxyFCGIBackendType GENERIC <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:8073#" </FilesMatch> AllowOverride all Require all granted </Directory>CentOS版と異なるのは、3行目のProxyFCGIBackendType GENERICと、5行目の行末に#が入っているあたりです。
ProxyTimeout 600
DOS窓が邪魔な場合は、RunHiddenConsoleというのがあるようです。
php-cgi.exeをただ起動しただけではプロセスが1つしか起動せず、処理可能な同時コネクション数も1つになります。
このままでは、SPAなどのブラウザから同時に複数のアクセスが走るような処理ではパフォーマンスが大幅に悪くなってしまいます。
そこで、以下のように設定を入れてあげます。
@ECHO OFF set PHP_FCGI_CHILDREN=8 set PHP_FCGI_MAX_REQUESTS=10000 RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:8073
このとき、設定変数の意味はそれぞれ以下の通りです。
環境変数 | 意味 |
PHP_FCGI_CHILDREN | 起動する子プロセス数を指定します。上記の様に8を指定すると、8個のプロセスが起動します。 |
PHP_FCGI_MAX_REQUESTS | 子プロセスが起動中に処理できるリクエスト数を指定します。指定回数処理すると自動終了します。(参考URL(iii)参照。記事中では(当時は)Windowsでは使用不可と書かれていますが、今は使えるようです) |