PHPのerror_reportingについて、見直す機会があったのでまとめてみました!
PHPのerror_reportingとは?
error_reportingはPHPでの設定項目です。エラーの出力レベルを設定します。
設定された内容によって、出力されるエラー内容が変わってきます。
error_reportingはphp.iniでの設定値ですが、コードで設定するためのerror_reporting関数も存在します。
設定するエラーレベルによって、出力する内容が変わります。
Laravelを使用しているときは注意
フレームワークとして、Laravelを使用している場合は意図せずに警告や非推奨などをcatchしてしまうことがあるので、気をつけたいところです。
(Laravelの場合は警告や非推奨でもExceptionがスローされます。)
error_reportingの設定方法
error_reportingの設定方法です。
PHPで定義されている定数を使用して設定します。
php.iniに設定を追加する
設定例を確認してみましょう。
ここではPHPの設定ファイルphp.ini
に設定する場合の設定例を書いています。
ファイルを開いて、error_reporting項目に設定値を書いてあげればOKです。
全てのエラーを表示する場合は下記です。
error_reporting = E_ALL
E_ERRORとE_WARNINGとE_PARSEレベルのみのエラーを表示する場合は下記です。
|
で論理和(or)として定義できます。
error_reporting = E_ERROR | E_WARNING | E_PARSE
E_DEPRECATEDとE_NOTICEレベル以外のエラーを表示する場合は下記です。
& ~
で左の全てから引いた条件で指定できます。
error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_NOTICE
|
や&
, ~
はビット演算子です。
ビット演算子については公式ドキュメントのこちらに書いています。
コードを書いて設定する
php.iniに設定する場合と同じようにerror_reporting関数を使うと、コード実行時に出力制御ができます。
下記のようにerror_reporting関数を呼び出して、設定値を引数として渡します。
<?php
error_reporting(E_ALL & ~ E_DEPRECATED);
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);
ここで設定していない場合は、PHP7だと下記のエラーが出力されてしまいます。
Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /path/file.php ...
が、上記のコードでは非推奨エラー(E_DEPRECATED)は出さないようになるので、エラーメッセージは出力されなくなります。
エラー出力設定で使用できる定数一覧
公式サイトに載っている、エラー出力設定できる定数一覧です。
説明は簡単にして載せています。詳しくはこちらをご参照ください。
値 定数 簡単な説明 1 E_ERROR (int) 重大な実行時エラー。 2 E_WARNING (int) 実行時の警告 (致命的なエラーではない)。 4 E_PARSE (int) コンパイル時のパースエラー。 8 E_NOTICE (int) 実行時の警告。 16 E_CORE_ERROR (int) PHPの初期始動時点での致命的なエラー。 32 E_CORE_WARNING (int) (致命的ではない)警告。PHPの初期始動時に発生する。 64 E_COMPILE_ERROR (int) コンパイル時の致命的なエラー。 128 E_COMPILE_WARNING (int) コンパイル時の警告(致命的ではない)。 256 E_USER_ERROR (int) ユーザーによって発行されるエラーメッセージ。 512 E_USER_WARNING (int) ユーザーによって発行される警告メッセージ。 1024 E_USER_NOTICE (int) ユーザーによって発行される注意メッセージ。
参考
公式ドキュメント:error_reporting関数
公式ドキュメント:エラー処理の定義済み定数
コメント