MacOS Xの開発環境で、PHP5とPHP4を共存させる。(CGI編)

このエントリは、以下のエントリの改訂。
開発用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に対応させ、高速化を図ることにする。待て、次号。

トラックバック

コメント


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

Twitter