# $Id: README.UPDATING_TO_PHP6.ja 372 2008-01-01 00:06:30Z m-takagi $ # EN-Revision: 1.5 # (http://cvs.php.net/viewcvs.cgi/php-src/README.UPDATING_TO_PHP6?revision=1.5&view=markup) 自作のスクリプトを PHP6 に対応させる方法 ======================================== このドキュメントでは、PHP6 で変更された点や削除された機能などについて説 明するとともに、既存のアプリケーションを PHP6 に対応させる方法についても 説明します。 1. 言語仕様 1.1 関数および関数のエイリアス 1.2 Register globals 1.3 マジッククォート 1.4 長い形式の配列 ($HTTP_*_VARS) 1.5 Zend Engine 1 (ZE1) 互換モード 1.6 dl() 関数 1.7 E_ALL および E_STRICT 1.8 参照 2. Unicode (README.UNICODE-UPGRADES を参照ください) 2. 拡張モジュール 2.1 GD 1.1 関数および関数のエイリアス -------------------------- 1.2 Register globals ---------------- セキュリティ上の理由により、register_globals は PHP6 から削除されます。 ini_get('register_globals') は常に false を返すようになります。 この機能をエミュレートするには、コードに少々手を加える必要があります。 *DISCLAIMER* people should get a short-term solution if they are willing to run an insecure app. セッション関連の関数やグローバル変数の自動登録機能をエミュレートする例を 示します。 $_register_globals_order = strrev(ini_get("variables_order")); $_register_globals_order_len = strlen($_register_globals_order); for($_register_globals_i=0;$_register_globals_i<$_register_globals_order_len;$_register_globals_i++) { switch($_register_globals_order{$_register_globals_i}) { case "E": extract($_ENV, EXTR_REFS|EXTR_SKIP); break; case "G": extract($_GET, EXTR_REFS|EXTR_SKIP); break; case "P": extract($_POST, EXTR_REFS|EXTR_SKIP); break; case "C": extract($_COOKIE, EXTR_REFS|EXTR_SKIP); break; case "S": extract($_SERVER, EXTR_REFS|EXTR_SKIP); break; } } unset($_register_globals_order, $_register_globals_order_len, $_register_globals_i); function session_register($mixed) { static $started; if(!isset($started) || session_id() === "") { session_start(); $started = true; } $array = func_get_args(); foreach($array as $mixed) { if(is_scalar($mixed)) { $_SESSION[$mixed] =& $GLOBALS[$mixed]; } elseif(is_array($mixed)) { foreach($mixed as $name) { $ok = session_register($name); if(!$ok) { return false; } } } else { return false; } } return true; } function session_is_registered($name) { if(is_scalar($name)) { return isset($_SESSION[$name]); } return false; } function session_unregister($name) { if(isset($_SESSION[$name]) && is_scalar($name)) { unset($_SESSION[$name]); return true; } return false; } 1.3 マジッククォート ---------------- 1.4 長い形式の配列 ($HTTP_*_VARS) ----------------------------- register_long_arrays および長い形式のスーパーグローバルが削除されました。 register_long_arrays が設定されている場合は、PHP の起動時に E_CORE_ERROR が発生します。 長い形式のスーパーグローバル配列をエミュレートするには、次のようなファイ ルを作成してそれをインクルードします。 1.5 Zend Engine 1 (ZE1) 互換モード ------------------------------ ZE1 互換モード (PHP4 形式のオブジェクトモデル) は PHP4 から PHP5 への移 行を支援するものでしたが、100% の互換性を保つことはできませんでした。 PHP6 ではこの機能が完全に削除されます。この機能をエミュレートする方法は ありません。つまり、PHP5/PHP6 形式のオブジェクトモデルの使用が必須となる ということです。 1.6 dl() 関数 --------- dl() 関数は、CLI, CGI そして EMBED SAPI でのみサポートされるようになりま した。この関数をエミュレートする方法はありません。使用中の SAPI で dl() をサポートしているかどうかを調べるには、次のようにします。 1.7 E_ALL および E_STRICT --------------------- エラー報告用の定数 E_ALL に E_STRICT も含まれるようになります。 E_STRICT を報告させたくない場合 (訳注: PHP 5 における E_ALL と同じ挙動に したい場合) は、次のようにします。 1.8 参照 ---- 2.1 GD