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

第4回 モジュール関連の違い

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

移行時に注意が必要な関数

以下の関数はPHP4とは異なる動作をします。

関数機能
strrposneedleが最初の1文字でなく文字列全体がニードルとなる。不正なオフセットでNoticeエラーが発生する。
strriposneedleが最初の1文字でなく文字列全体がニードルとなる。不正なオフセットでNoticeエラーが発生する。
strtotime失敗した場合の戻り値が-1ではなくFALSEを返す。タイムゾーンエラーでE_STRICTとE_NOTICEエラーが発生する。タイムゾーンが設定されていないとE_STRICTエラーが発生する。
array_merge引数が配列型のみを受け付けるように変更された。
get_class, get_parent_class, get_class_methodsクラス,メソッド名が定義された状態のまま返される。
ip2long不正なIPアドレスが渡された場合,-1ではなくFALSEを返す。
include_once, require_once(Windows)A.php,a.phpなど,ファイル名の大文字・小文字が異なっても一度のみファイルを読み込む。
getrusage不正なパラメータが渡された場合,配列ではなくNULLを返す。
mb_strrposoffsetパラメータが追加され,古いシグニチャの利用は推奨されなくなった。
pg_escape_string, pg_escape_bytea, mysql_real_escape_string接続パラメータが追加された(次回にセキュリティ関連の変更として紹介します⁠⁠。

エラーイベント

PHP4と比べ,PHP5は不正な引数や使用方法でエラーが発生するようになっています。例えば,bzip2モジュールのアーカイブオープン関数を「bzopen("", "w")」のように空のファイル名を指定するとE_WARNINGエラーが発生します。このようなエラーチェックの強化は多数の関数で実施されています。

これらのエラーの多くはバグやパラメータのチェック不足で発生すると思われますが,エラーハンドラですべてのエラーでスクリプトの実行を停止している場合はエラーが発生するコードの修正またはエラーハンドラの修正が必要となる場合もあります。

まとめ

特にPHP4でXML関連の操作を行うアプリケーションを構築している場合,単純にPHP5に移行することができないアプリケーションも多いと思います。

PHP5はソースディストリビューションに含められていた多くのモジュールをPECLに移動しています。モジュールの違いはPHP5へ移行する場合の最も大きな障害となるケースも多いので注意が必要です。

次回はセキュリティに関連した変更を紹介します。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書