PHP4とPHP5の同居方法あれこれ

1-3. 1台のPCに1つのApacheをインストールし、PHP5をDSOで、PHP4をCGIで実行する

1-4. PHP5をインストールし、部分的にPHP4互換モードで実行する
PHP5をインストールし、部分的にPHP4互換モードで実行する場合のイメージは以下のようになります。

		      (Internet)
		           |
		      (FireWall)
		           |
		+========= | =========+
		|          |          |
		|      (Port 80)      |
		|          |          |
		|  +---------------+  |
		|  |               |  |
		|  |    Apache A   |  |
		|  |       +       |  |
		|  |     PHP5/     |  |
		|  | PHP4互換モード|  |
		|  +---------------+  |
		+=====================+
  • メリット
    • ディレクトリ単位(.htaccess/httpd.conf)、ファイル単位(ini_set)でのPHPのバージョン分けが可能
    • Apacheが1台で済み、他の方法に比べてリソースを有効に使える
  • デメリット
    • 互換モードなので、完全互換かどうかは?(各自で検証のこと)
    • 互換モード下で作動しているスクリプトでもphpvrsion()での戻り値は5.x.xになるので、注意が必要


1-4-1. PHP4互換モードとは?
PHP5に搭載されているPHP4互換モードとはマニュアルによると、
Zend Engine 1 (PHP 4) との互換モードを有効にします。 この設定は、オブジェクトのコピー、キャスト (プロパティを 保持しないオブジェクトが FALSE あるいは 0 のいずれになるか)、 そして 比較 に影響を与えます。このモードの場合、オブジェクトを渡す際の デフォルトの方法は、参照渡しではなく値渡しとなります。
とあります。

上記のように、マニュアルに記載されている情報から読み取れるのは、クラス関連の挙動に影響の互換性を確保するためのもののようです。

上記情報を含むPHP4とPHP5の差異に関しては、PHPのマニュアルにある「PHP4からPHP5への移行」セクションを参照してください。

1-4-2. ディレクトリ単位(httpd.conf/.htaccess)での設定
特定のバーチャルホスト以下全て、特定のディレクトリ以下全てをPHP4互換モードで実行させる場合は以下のように設定します。

.htaccessで設定する場合
※httpd.confの当該ディレクトリに設定するAllowOverrideの引数はAllまたはOptionsである必要があります。
php_flag zend.ze1_compatibility_mode On

httpd.confで設定する場合
<Directory /var/web/www.example.com/htdocs/php4/>
  php_flag zend.ze1_compatibility_mode On
</Directory>

1-4-3. ファイル単位での設定
PHPスクリプトの先頭にini_set()を記述してPHP4互換モードの設定をします。
※PHP4互換モードで実行したい全てのスクリプトに設定する必要があります。
<?php
ini_set('zend.ze1_compatibility_mode', true);

〜スクリプト本体〜

?>

1-4-4. 動作確認
1-4-2.の方法で設定した場合は、phpinfo()関数で出力されるページのzend.ze1_compatibility_modeのLocal ValueがOnであれば、指定のディレクトリ以下のスクリプトがPHP4互換モードで動作することになります。

1-4-3.の方法で設定した場合は、スクリプト毎に確認する必要があります。

PHP4とPHP5の同居方法あれこれ
SOFTWARE

Copyright (C) 2006 N.S.WORKs All Rights Reserved.