WEBアプリケーションのテスト環境として、ローカルマシンにApache+PHP4とPHP5の両方を用意しておきたいと思い、幾つかのサイトを覗いてみた。
CGIとして動作させる場合の共存方法や、別々のポート指定、その都度設定を差し替えるといったことは色々なところで取り上げられていたけど、出来れば.htaccessの指定だけで実現したい。
というわけで、試行錯誤した挙句バイナリをちょこっと書き換えるという、かなり強引なやり方だけど(汗)一応実現することができたので簡単に?書きまとめた。
OSはWindowsXP。
ローカル環境
Apache1.3.37+PHP4.4.4+PHP5.2.0
インストール
[Apache1.3.37]http://archive.apache.org/dist/httpd/binaries/win32/apache_1.3.37-win32-x86-src.msi
インストーラの指示に従って普通にセットアップ
[PHP 4.4.4 zip package]http://www.php.net/get/php-4.4.4-Win32.zip/from/a/mirror
ZIPファイルをC:\php4に解凍
[PHP 5.2.0 zip package]http://www.php.net/get/php-5.2.0-Win32.zip/from/a/mirror
ZIPファイルをC:\php5に解凍
php4のphp.ini-distをC:WINDOWSへコピーしてphp.iniにリネーム。php.iniの内容を自分の環境に合わせる。
php5のphp.ini-distを同じ場所に複製してphp.iniにリネーム。こちらもphp.iniの内容を自分の環境に合わせる。
extension関係あたり?
Apacheの環境設定、C:\Program Files\Apache Group\Apache\conf\httpd.confを編集。以下、行の最後にでも追加する。
----------------------------------------------------------
# PHP 5
LoadModule php5_module "C:\php5\php5apache.dll"
AddModule mod_php5.c
PHPIniDir "C:\php5"
# PHP 4
LoadModule php4_module "C:\php4\sapi\php4apache.dll"
AddModule mod_php4.c
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
----------------------------------------------------------
(PHPIniDirでphp.iniを任意の場所から呼び出せるけど、PHP4ではエラーとなってしまった)
C:\php5\php5apache.dllをバックアップのため複製しておく。
バイナリエディタでphp5apache.dllを開いて、以下の文字列を検索。
application/x-httpd-php-source
application/x-httpd-php
これを、
application/x-httpd-ph5-source
application/x-httpd-ph5
(php→ph5)に変更する。
※php5.2.0(php5apache.dll)の場合のアドレスは
0x00004312 70 → 35
0x00004332 70 → 35
(x-httpd-php5などにするとアドレスがずれるのでNG)
システムのプロパティ→詳細設定→環境変数のPathに以下を追加。
C:\php4;C:\php4\sapi;C:\php5;
Apacheを再起動して準備完了!
これで、デフォルトではPHP4として動作。
.htaccessで
AddType application/x-httpd-ph5 .php
AddType application/x-httpd-ph5-source .phps
と設定するとそのディレクトリ以下はPHP5で動作。
バイナリエディタでMIME Typeを変更して強引に共存させたけど、テスト環境が必要な場合には、まあ、それなりに有効・・・かも?
Apache1.3.37で試しただけなので、Apache2や2.2系でも出来るかどうかは不明・・・
この記事へのコメント
takaq
Windows Server 2003、Apache2.0.61+PHP4.4.7+PHP5.3.5 でも出来ましたよ♪
ありがとうございました。