MacOS Xの開発環境で、PHP5とPHP4を共存させる。(CGI編)
2007/06/17 18:09
このエントリは、以下のエントリの改訂。
開発用Macでの、PHP5とPHP4の共存
結論から言うと、相変わらず正攻法ではムリなのである。
ぼく個人の心情や会社の事情とは無関係に、PHP5案件とPHP4案件が同時進行する状況も珍しくなくなった。httpd.confを書き換えてApacheを再起動するのでも対応出来なくはないが、スマートとは言えない。
ここ数ヶ月、PHP4をCGI版で運用する方法を試してみたが(PHP5は通常通りApacheに組み込み)、なかなか具合が悪くなかったので、ここに備忘録を残すことにする。
一般化出来ない私的な話で恐縮だけど、まずは「どうしてもPHP4を利用しなければいけない状況」について検討したい。
PHP5にはPHP4互換の動作モードがあり(zend.ze1_compatibility_modeをOn、以下「互換モード」)、これを利用すればオブジェクトの代入が値渡しとなって、PHP4との互換性が保たれるとされる。だが、実際にはそれだけでは不十分で、あまり役に立っていないのは周知の通り。
冷静に思い返すと、互換モードでも動作させることが出来ないPHP4のシステムには、共通点があった。その共通点とは「mojavi2を使っていること」で、それ以外のシステムでは修正せずに(又はわずかな修正のみで)PHP5上で動作させることが出来たのである。
mojavi2だけをPHP4対応すればよいなら、話は簡単。mojavi2アプリのリクエストは、唯一つのindex.phpからディスパッチされるから、こいつのCGI版を作るだけで解決する。
即ち www/index.php のコピーを www/index.cgi に置き、ファイルの先頭にCGI版PHP4へのパス("#!/usr/local/bin/php4-cgi" 等)を書いて、実行ビットを立てる。
httpd.confに、例えば以下の様なバーチャルホストを記述すれば、移植完了だ。
<VirtualHost *>
ServerName hoge.localhost
DocumentRoot htdocs/hoge/www
DirectoryIndex index.cgi index.html index.htm
<Location />
Options +ExecCGI
</Location>
</VirtualHost>
話が前後したが、PHP4とPHP5のビルドでは、それぞれ以下のオプションを使用する。但し、MacPorts版のApache 2.2等が導入済みの環境に、あえて野良ビルドのPHPを組み込むという、特殊なケースを想定している点はご了承を。(そのあたりの経緯は前回をご覧頂きたい)
#!/bin/sh cd php-4.4.xxx mkdir mysql5 ln -s /usr/local/include/mysql5 mysql5/include ln -s /usr/local/lib/mysql5 mysql5/lib ./configure \ --enable-fastcgi \ --with-config-file-path=/usr/local/etc/php4 \ --enable-mbstring \ --enable-mbregex \ --enable-zend-multibyte \ --with-gd \ --with-jpeg-dir=/usr/local \ --with-png-dir=/usr/local \ --with-zlib-dir=/usr/local \ --with-freetype-dir=/usr/local \ --enable-gd-native-ttf \ --with-mysql=./mysql5 \ --with-mysql-sock=/usr/local/var/run/mysql5/mysqld.sock \ --with-curl=/usr/local
--enable-fastcgi のあたりは、次回への伏線。 :-)
続いてPHP5。
#!/bin/sh cd php-5.2.xxx mkdir mysql5 ln -s /usr/local/include/mysql5 mysql5/include ln -s /usr/local/lib/mysql5 mysql5/lib ./configure \ --with-config-file-path=/usr/local/etc/php5 \ --enable-mbstring \ --enable-zend-multibyte \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-xmlrpc \ --enable-soap \ --with-xsl=/usr/local \ --with-gd=/usr/local \ --with-jpeg-dir=/usr/local \ --with-png-dir=/usr/local \ --with-zlib-dir=/usr/local \ --with-freetype-dir=/usr/local \ --enable-gd-native-ttf \ --with-mysql=./mysql5 \ --with-pdo-sqlite=/usr/local \ --with-pdo-mysql=/usr/local/bin/mysql_config5 \ --with-pdo-pgsql=/usr/local/lib/postgresql82/bin \ --with-curl=/usr/local
PHP4の案件が絶えることはない。恐らく2,3年後も、PHP4は滅びずに残っているだろう。いちユーザーとして、PHP5の新機能を積極的に利用してはいるけれども、まだまだPHP4とも上手く付き合っていく必要がありそう。
次回は上記手順をFastCGIに対応させ、高速化を図ることにする。待て、次号。
