ログ日記

作業ログと日記とメモ

error_reporting() と @エラー制御演算子

ちょっと勘違いをしてた。
error_reporting を 0 にしてもファイル出力に対するエラーは行われるものと思い込んでた。
PHP: set_error_handler - Manual
所々に書いてあるが、分かり難い・・。


実際はerror_reportingを0にするとerror_logで指定したログファイルにも何も記述されない。
ということで自分でエラーハンドラを作る場合は

function myError($level, $msg, $file = null, $line = null, $text = null){
    if (error_reporting() === 0)
        return;

    switch ($level){
    case E_WARNING:
        ....
    
    }
}
set_error_handler('myError');

error_reporting(E_ALL);
ini_set('log_errors', 'On');
ini_set('error_log', 'error.log');

// エラーのテスト
$a = $a;
$b = @$b;

みたいにerror_reporting()を初めにチェックしないと自分の知らないところにある@演算子で思わぬエラーを表示してしまうことがある。