カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2017年09月14日(木)

PHP user_error の処理を set_error_handler で置き替えてみた

phpseclib という PHP ライブラリーが
user_error という関数を呼んだ結果、
詳しいエラー情報が出力されちゃうのを
回避するために、set_error_handler を使って
標準のエラー処理を回避しました。

user_error は、trigger_error の別名だそうです。

set_error_handler の説明はかなりあいまいなので、
わかったことを書いときます。

まず、 trigger_error() にある「E_USER 関連の定数」というのは、
定義済み定数 のうち、E_USER から始まるものということのようです。

それ以外のエラーでは、set_error_handler で設定した
カスタムエラーハンドラはコールされないといいのですが
set_error_handler によると、E_STRICT もくるっぽいですね。

-- 2017/09/15 追記 --
E_NOTICE も来ました。set_error_handler
「以下のエラータイプは、ユーザー定義の関数では扱えません」
にあるタイプが来ないということのようですね。
--

きちんと、調べたわけではないのでわかりませんが、
少なくとも、構文エラーでは呼ばれませんでした。

set_error_handler の説明にある
「必要に応じて die() を コールする責任」は
E_USER_ERROR では die すべきという意味っぽいですね。

というのも、 定義済み定数 の E_USER_ERROR の説明には
「E_ERROR に似ている」とあり、E_ERROR の説明には
「スクリプトの実行は中断されます」とあるからです。

ちなみに、phpseclib の私が利用している部分のコードでは、
user_error を標準の引数、すなわち、E_USER_NOTICE で呼びだした後
エラーを返すみたいなコードになっていたので、
特に die する必要は無さそうでした。

-- 2017/09/15 追記 --
基本的には、定数名に ERROR がついている場合は、
die すべきということっぽいですね。
E_RECOVERABLE_ERROR は微妙ですが、
標準のハンドラーは die するみたいなことが書いてあります。
あと、E_NOTICE は配列の存在しない添字へのアクセスで
発生したので、die した方が安全かもしれません。
--

・・・

ちなみにテスト環境の php は、7.1.7 です。

ブログ著者のホームページはこちら です。


コメント
コメントする