開発用Macでの、PHP5とPHP4の共存
2006/06/23 20:24
タイトルをご覧になって期待された方にはホントに申し訳ないが、べつに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
