PHP でなぜか、エラーやNotice が表示されない理由と調査方法


PHPで開発している時に、Notice, Warning, Errorを表示させるために設定をしたが、なぜかエラー表示すらしない場合があります。その理由をまとめてみました。

検索してもまとめを書いてあったサイトがなかったので、以下に書いておきます。

チェックするべき場所

php.ini の設定を確認する

rpmとソースでインストールしている場合は、php.ini の場所をphpinfo() 等でちゃんと調べる

.htaccess の中身を確認する

ここで制御していないか?

PHP のソースの中を確認する

どこかで以下のような設定をしていないか?


ini_set('display_errors', 'Off');
//ini_set('error_reporting', E_ALL); // E_ALL ^ E_NOTICE
set_error_handler

表示されない原因として考えられるもの

  • .htaccess でdisplay_errors = Off 設定している
  • PHPスクリプトのどこかで ini_set でOffにしている
  • ob_start()している? (途中でエラー?)
  • @ エラー制御演算子を使っている
  • set_error_handler を使っている

調査方法


上記の用語でソースを検索して調べる


エラーやNoticeが起きるスクリプトを作って実行したら、どうなるか?をみてみる


まとめ


どうしても表示されない場合は、まずは切り分けを。最小構成で表示されるか確認して、徐々に範囲を広げていけば、どこに表示されない原因があるのかがわかるでしょう。



上記以外の理由があった場合は、是非ご一報頂ければと思います。