微妙に乗り遅れ気味なのですが、最近 PHP 関係のブログでプチ流行だったので、僕の場合の方法を紹介します。
Apache + CLI 編
メイン環境 + コマンドラインでバージョンごとの挙動の違いを確認するための環境。
Apache は Mac OS X 標準の Apache 1.3.33。
PHP 5.1.2 は /usr/local に cli + mod_php5。PHP 4.4.2 と PHP 5.0.5 は cli だけで、prefix を変えてインストール。シンボリックリンクを使う代わりに --bindir と --program-suffix を変えている。
lib に php.ini を置くのは気持ち悪いので etc。PEAR も lib/php ではなく FreeBSD 風に share/pear。
PHP 5.1.2
%cat mk-php51.sh prefix=/usr/local ./configure --prefix=${prefix} --mandir=${prefix}/share/man \ --with-config-file-path=${prefix}/etc \ --with-config-file-scan-dir=${prefix}/etc/php \ --with-pear=${prefix}/share/pear \ --with-apxs=/usr/sbin/apxs \ (中略) && make && make test
PHP 5.0.5
%cat mk-php50-cli.sh #!/bin/sh prefix=/usr/local/php-5.0 CC="/usr/bin/gcc-3.3" CPP="/usr/bin/cpp-3.3" CXX="/usr/bin/g++-3.3" \ \ ./configure --prefix=${prefix} --mandir=${prefix}/share/man \ --bindir=/usr/local/bin --program-suffix="-5.0" \ --with-config-file-path=${prefix}/etc \ --without-pear --disable-cgi --enable-cli \ (中略) && make && make test
PHP 4.4.2
%cat mk-php44-cli.sh #!/bin/sh prefix=/usr/local/php-4.4 ./configure --prefix=${prefix} --mandir=${prefix}/share/man \ --bindir=/usr/local/bin --program-suffix="-4.4" \ --with-config-file-path=${prefix}/etc \ --without-pear --disable-cgi --enable-cli \ (中略) && make && make test
Lighttpd + FastCGI 編
Web アプリでバージョンごとの挙動の違いを確認するための環境。
lighttpd 1.4.10 は 終了時に FastCGI のソケットを削除しないバグがあるので 1.4.9 を使用。
PHP 4.4.2: 8044 番、PHP 5.0.5: 8050 番、PHP 5.1.2: 8051 番と、ポート番号を変えて lighttpd を複数起動。
mk-php{44,50,51}-fcgi.sh
% cat mk-php51-fcgi.sh #!/bin/sh prefix=${HOME}/Applications/php51-fcgi ./configure --prefix=${prefix} --mandir=${prefix}/share/man \ --with-config-file-path=${prefix}/etc \ --with-config-file-scan-dir=${prefix}/etc/php \ --without-pear --enable-fastcgi \ (中略) && make && make test
lighttpd-php{44,50,51}.conf
ドキュメントルートは共通で、ポート番号とログ・ソケット・PID のパスを変える。
% cat ~/Applications/lighttpd/etc/lighttpd-php51.conf (抜粋) server.document-root = "/Users/rsky/Sites/lighty/" server.errorlog = "/Users/rsky/Applications/lighttpd/log/lighttpd-php51.error.log" accesslog.filename = "/Users/rsky/Applications/lighttpd/log/access-php51.log" server.port = 8051 server.pid-file = "/private/tmp/lighttpd-php51.pid" fastcgi.server = (".php" => ( "localhost" => ( "socket" => "/private/tmp/php51-fastcgi.socket", "bin-path" => "/Users/rsky/Applications/php51-fcgi/bin/php" ) ) )
lighttpdctl
lighhtpd の起動・終了には超適当なシェルスクリプト lighttpdctl を使う。
% cat lighttpdctl #!/bin/sh LIGHTTPD_BASE="${HOME}/Applications/lighttpd" LIGHTTPD_BIN="${LIGHTTPD_BASE}/sbin/lighttpd" LIGHTTPD_CONF44="${LIGHTTPD_BASE}/etc/lighttpd-php44.conf" LIGHTTPD_CONF50="${LIGHTTPD_BASE}/etc/lighttpd-php50.conf" LIGHTTPD_CONF51="${LIGHTTPD_BASE}/etc/lighttpd-php51.conf" LIGHTTPD_PORT44="8044" LIGHTTPD_PORT50="8050" LIGHTTPD_PORT51="8051" LIGHTTPD_PID44="/private/tmp/lighttpd-php44.pid" LIGHTTPD_PID50="/private/tmp/lighttpd-php50.pid" LIGHTTPD_PID51="/private/tmp/lighttpd-php51.pid" LIGHTTPD_CHK="/private/tmp/lighttpd.running" case "$1" in start) if [ -e ${LIGHTTPD_CHK} ] then echo "lighttpd already running." exit 1 else echo "starting lighttpd..." ${LIGHTTPD_BIN} -f ${LIGHTTPD_CONF44} && echo "lighttpd + php-4.4 uses port #${LIGHTTPD_PORT44}" ${LIGHTTPD_BIN} -f ${LIGHTTPD_CONF50} && echo "lighttpd + php-5.0 uses port #${LIGHTTPD_PORT50}" ${LIGHTTPD_BIN} -f ${LIGHTTPD_CONF51} && echo "lighttpd + php-5.1 uses port #${LIGHTTPD_PORT51}" touch ${LIGHTTPD_CHK} fi ;; stop) if [ -e ${LIGHTTPD_CHK} ] then echo "stopping lighttpd..." kill `cat ${LIGHTTPD_PID44} ${LIGHTTPD_PID50} ${LIGHTTPD_PID51}` rm ${LIGHTTPD_CHK} else echo "lighttpd not running." exit 1 fi ;; restart) if [ -e ${LIGHTTPD_PID} ] then echo "stopping lighttpd..." kill `cat ${LIGHTTPD_PID44} ${LIGHTTPD_PID50} ${LIGHTTPD_PID51}` sleep 1 fi echo "starting lighttpd..." ${LIGHTTPD_BIN} -f ${LIGHTTPD_CONF44} && echo "lighttpd + php-4.4 uses port #${LIGHTTPD_PORT44}" ${LIGHTTPD_BIN} -f ${LIGHTTPD_CONF50} && echo "lighttpd + php-5.0 uses port #${LIGHTTPD_PORT50}" ${LIGHTTPD_BIN} -f ${LIGHTTPD_CONF51} && echo "lighttpd + php-5.1 uses port #${LIGHTTPD_PORT51}" touch ${LIGHTTPD_CHK} ;; *) echo "Usage: $0 start|strop|restart" ;; esac