残り一年! PHP4からPHP5への移行

第1回 移行前の基礎知識

この記事を読むのに必要な時間:およそ 4.5 分

無効な文字列オフセットアクセス

PHP5から無効な文字列オフセットへのアクセスはE_ERRRORエラーが発生します。

例:無効な文字列オフセットへのアクセス

<?php
$str = 'abc';
unset( $str{1} );
echo $str;
?>

例:PHP5で実行

[yohgaki@dev php4-php5-migration]$ ./php5 invalid_str_offset.php

Fatal error: Cannot unset string offsets in /home/yohgaki/php4-php5-migration/invalid_str_offset.php on line 3

PHP4では問題なく実行できていたスクリプトが途中で実行を停止する場合もあるので,注意が必要です。

エラー処理

PHP5には新しくE_STRICTエラーとE_RECOVERBLE_ERRORエラーの2つエラーレベルが追加されています。

E_STRICTエラーは構文上問題はないが推奨できない使い方や,プログラマが意図していない処理である場合に発生するエラーです。PHP5の以前のバージョンではclass定義中のvar宣言でもE_STRICTエラーが発生したため,PHP4用に書かれたコードに対してE_SCRICTエラーを有効にして利用することは不可能でした。PHP5.1.3からvar宣言でE_STRICTエラーは発生しないように変更されました。

E_RECOVERBLE_ERRORはPHP5.2.0から追加されたエラーレベルです。このエラーレベルはE_ERRORに設定されているエラーの中でも,プログラムの実行を中止しなくても言語エンジンに不整合が発生しないエラーの場合に発生するエラーです。このエラーはset_error_handlerで設定したエラーハンドラで処理できるので,エラーページを表示するなど行儀よくプログラムの実行を終了できるようになりました。筆者はPHPにパッチを当ててE_ERRORもエラーハンドラで終了させるようにしていましたが,このパッチが必要なケースは少なくなると思います。

新しいエラーレベルが追加されたと同時にE_ALLの値も変更されました。PHP4のE_ALLは2047でしたが,6413に変更されています。新しいE_ALLはE_STRICTを除くすべてのエラーレベルが有効に設定されます(PHP6ではE_STRICTも含めて有効となる予定⁠⁠。

E_STRICTを有効にするとプログラミングエラーを発見できる場合もあります。基本的にはE_STRICTも有効に設定する方がお勧めです。

例:php.ini設定例

error_reporting = E_ALL | E_STRICT

httpd.confなどでerror_reportingを設定する場合,PHPの定数は利用できません。このため数値で設定します。PHP 5.2と同じくE_ALLに設定するには

例:httpd.confや.htaccessで設定する場合

php_admin_value error_reporting 6143

と設定しなければなりません。E_STRICTも有効にする場合は

php_admin_value error_reporting 8191

とします。

アプリケーションが動作するためにはエラーハンドラの書き換えは必要ないです。システムのポリシーとして全てのエラーは補足し記録している場合などは,エラーハンドラの書き換えが必要になります。

まとめ

今回はPHP5に移行に必要な基礎知識を解説しました。

次回はPHP4.4未満のユーザ向け情報とオブジェクトの仕様変更の一部を解説します。

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書