開発用Macでの、PHP5とPHP4の共存

タイトルをご覧になって期待された方にはホントに申し訳ないが、べつにMacだからといって、PHP4とPHP5の共存が容易に出来るということは決してない。
それにしても、--enable-versioningはいつ実装されるのだろう?(もう期待してないけど)

開発環境に限った話をすれば、必要に応じてhttpd.confを書き換えた上で、Apacheを再起動することで対応出来る。具体的にいうと、PHP4の案件ではlibphp5.soの行をコメントアウトして、PHP5の案件では逆にlibphp4.soの行をコメントアウト。
泥臭い方法ではあるが大した手間ではないし、また本番環境により近い設定であるとも言えるし、構わないのではないかと。手作業ではあるけど。

パッケージシステム由来のPHPを、希望通りの設定でインストールするのは困難を極める。
まして、「PHP4とPHP5を切り替えて使う」なんて特殊な要件があれば、なおさらのこと。
ぼくが最近使い始めたDarwinPortsも例外ではなくて、PHPに限っては以前通り、tarballから手作業でビルドする方が賢明だと思った。

以前買った「極める ! PHP」なる雑誌にも同様のテーマを扱った記事があって、やはり「正攻法では不可能」であることを前提として、裏技的な方法をいくつか紹介していた。(Apacheモジュール版ではなく)CGI版をビルドする方法、少々冗長だがリバースプロキシを利用した方法等。
CGI版を使った方法だが、利用する全てのスクリプトの1行目に

#!/usr/local/bin/php4

とか

#!/usr/local/bin/php5

とか書かなくちゃいけない。MVCフレームワークではフロントコントローラのファイルにだけこの対応をすれば良いだろうとは思うけど、とはいえ少々スマートさに欠ける。
以前、某案件でお世話になったホスティングサービスではこの点を上手く解決していて、各バーチャルホストの .htaccess に

AddHandler x-httpd-php441 .php

等と書き込む運用だった。CGI版でありながらApacheモジュール版に近い感覚で使え、CGI版に由来する機能制限が多少はあるにせよ、なかなかスマートに共存していたと思う。
当方恥ずかしながら、この方法の詳細な部分が把握出来ていない。是非、識者の方に伝授して頂きたいところ。

以下、PHP4及びPHP5のconfigureオプションの備忘録。
DarwinPortsのprefixは、デフォルト通り/opt/localとする。

PHP4

./configure \
  --prefix=/opt/local \
  --with-config-file-path=/opt/local/etc/php4 \
  --enable-mbstring \
  --enable-mbregex \
  --enable-zend-multibyte \
  --with-apxs2=/opt/local/apache2/bin/apxs \
  --with-gd \
  --with-jpeg-dir=/opt/local \
  --with-png-dir=/opt/local \
  --with-zlib-dir=/opt/local \
  --with-freetype-dir=/opt/local \
  --enable-gd-native-ttf \
  --with-mysql=/opt/local \
  --with-pgsql=/opt/local/lib/pgsql8/bin \
  --with-curl=/opt/local \

PHP5

./configure \
  --prefix=/opt/local \
  --with-config-file-path=/opt/local/etc/php5 \
  --enable-mbstring \
  --enable-mbregex \
  --enable-zend-multibyte \
  --with-apxs2=/opt/local/apache2/bin/apxs \
  --with-xmlrpc \
  --enable-soap \
  --with-xsl=/opt/local \
  --with-gd \
  --with-jpeg-dir=/opt/local \
  --with-png-dir=/opt/local \
  --with-zlib-dir=/opt/local \
  --with-freetype-dir=/opt/local \
  --enable-gd-native-ttf \
  --with-pdo-sqlite=/opt/local \
  --with-mysql=/opt/local \
  --with-pdo-mysql=/opt/local \
  --with-pgsql=/opt/local/lib/pgsql8/bin \
  --with-pdo-pgsql=/opt/local/lib/pgsql8/bin \
  --with-curl=/opt/local

トラックバック

コメント


コメントはすぐには反映しません。
ほぼ毎日チェックしていますが、翌日以降の反映となることもあります。

Twitter