PHPでregister_shutdown_functionを使ってエラーハンドリングした場合にFatal errorを無視する場合がある

PHPでFatal Errorsが起きた場合に画面が真っ白になるのを防ぐ手段としてregister_shutdown_functionを使う方法というのが一般的に使われています

引用元

これを実行すると画面上にエラーが表示されます
ERRORnr : 1 |Msg : Call to undefined function functiontest() |File : test.php |Line : 27

ところがこんなふうに書くとどうなると思いますか?

結果はno error where found と表示されます
functiontest2が存在しないことはなぜか無視されます

ちなみにini_set(‘display_errors’ , 1);すればFatal errorが表示されるが最後(functiontest2の前)まで実行されるという不思議な挙動になります

register_shutdown_functionは順番に実行されるのでこう書き換えると

echo 1 が出力されますが no error where found とは表示されなくなります
もちろんini_set(‘display_errors’ , 1);すればFatal errorが表示されます

わけがわかりませんね(゚∀゚)
知りたいのは書き換えた2つのようにエラーハンドリング以外の場合にregister_shutdown_functionを使ってFatal errorを取得してちゃんと想定通りの動きが出来るようになるのか?ということですが、出来るんですかね?

スポンサーリンク

シェアする

フォローする

コメント

  1. ngyuki より:

    シャットダウン関数 functiontest で fatal error になったためその次に呼ばれるはずだったシャットダウン関数 fatalErrorHandler が呼ばれなかった、からだと思いますよ?

    register_shutdown_function はエラーハンドラを登録するのではなく、スクリプトの終了時に実行される関数を登録するもので、シャットダウン関数の中で fatal error が発生したり exit で終了したりすると後続のシャットダウン関数は実行されません。

    • のぶ より:

      公式サイトにも載っている書き方ですし、(http://php.net/manual/ja/function.register-shutdown-function.php#85727)、FuelPHP内でも使われているのでこの使い方どうなの?って思って書いたので、エラーハンドラとして使うべきではないということでいいんでしょうか?

コメントを残す

トップへ戻る