--> -->

skimemo


skimemo - 日記/2019-12-05/Windows上のApacheでPHP5とPHP7を共存させる のバックアップ(No.3)


_ 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などでステップ実行している時間も算入されますので、デバッグする場合は長めにする必要があります。
    <IfModule fcgid_module>
    	FcgidIOTimeout 1800
    </IfModule>

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

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

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

_ 参考

Category: [Windows] - 13:57:42