skimemo


skimemo - 日記/2019-12-05/Windows上のApacheでPHP5とPHP7を共存させる

_ Windows上のApacheでPHP5とPHP7を共存させる

_ 概要

  • WindowsでPHP5とPHP7を共存させる
  • PHP5はモジュール版で、PHP7はfirst-cgiで動かす

Windowsの開発環境でPHP5と7を共存させる方法です。
WindowsのApache+PHPの組み合わせには、VCランタイムの問題が絡むので、PHP7はfirst-cgiで動作させて切り離してみました。

_ 手順

  1. PHP7のダウンロード
    こちらのページから、適当なNon Thread Safe版のzipをダウンロードして解凍して適当なディレクトリに配置します。

  2. php.iniの設定
    解凍したディレクトリに配置されているphp.ini-developmentをコピーして、php.iniを作成します。

  3. php-fpmの起動
    解凍したディレクトリでphp-fpmを起動します。
    > php-cgi.exe -b 127.0.0.1:8073

  4. apache(httpd.conf)の設定
    必要なモジュールを読み込ませます。
    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行目の行末に#が入っているあたりです。

    また、長い処理がタイムアウトにならないよう、適当な時間を設定してあげます。これは、xdebugなどでステップ実行している時間も算入されますので、デバッグする場合は長めにする必要があります。ちなみにこれは<Directory>〜</Directory>の外に置く必要があります。
    ProxyTimeout 600

  5. apacheの再起動
    サービスからApacheを再起動し、ブラウザでアクセスできれば成功です。

_ php-cgiのコマンドプロンプト

DOS窓が邪魔な場合は、RunHiddenConsoleというのがあるようです。

_ php-cgi実行時の設定

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では使用不可と書かれていますが、今は使えるようです)

_ 参考

  1. Apache and PHP-FPM in Windows
  2. [インストール]windows + nginx + php + pukiwiki
  3. なぜ、Windowsでphp-cgiが自動で終了してしまうのか?
Category: [Windows] - 13:57:42



 
Last-modified: 2020-03-21 (土) 22:39:18 (212d)