2016-10-27 15 views
2

PHPのドキュメントreads(強調鉱山):スクリプトの一部に対してのみエラー報告を無効にすることはできますか?

のerror_reporting()関数は、 、error_reportingディレクティブを実行時に設定します。 PHPには多くのエラーがあります。この関数を使用すると、スクリプトの実行時間(実行時間)は になります。オプションのレベル が設定されていない場合、error_reporting()は現在のエラー レポートレベルを返します。それは、エラー報告のレベルが唯一のPHPスクリプトで一度を設定すると、後で変更することはできませんことを

を意味するのでしょうか?例えば、それはこれを行うことが可能である:それはキャッチかでなければ、あれば、エラーがスローされているようですので、私は// Do nothingを書いた

error_reporting(0); 

try { 
    errorSilently(); 
} catch (Exception $e) { 
    // Do nothing 
} 

error_reporting(E_ALL); 

try { 
    errorLOUDLY(); 
} catch (Exception $e) { 
    // Do nothing 
} 

注意を、Apacheは、そのerror_logどのようにそれを書き込みます。私がしたいのは、その動作を無効にし、エラーログに書き込まないことです。

+1

「@」のプレフィックスを付けることで、特定のエラーを抑制することもできます。 'if(!@ mail(...)){...}' ...私の歯を縁に少し置くが、そこに行く:http://php.net/manual/en/language.operators.errorcontrol .php – CD001

答えて

7

はい、プログラムのランタイム中にいつでもエラー報告レベルを変更することができます。エラーレベルを変更するまで、その新しいレベルを維持します。 You 「沈黙」は特定の部分のみです。あなたはini_set('log_errors', false)に持っても、一時的に無効にエラーログ

$previous = error_reporting(0); 

something_which_produces_warnings_which_can_safely_be_ignored(); 

error_reporting($previous); 

error_reporting()はあなたのようなことを行うことができ、具体的ので、古いレベルを返すことに注意してください。

いいえ、try..catchは、エラー報告とは関係ありません。これらは別々のメカニズムです。 error_reportingは、trigger_errorによってトリガーされるエラーに影響します。 try..catchは、throwによってスローされた例外を処理するためのメカニズムです。

+2

OPに:そして、あなたが致命的なエラーについて話しているなら、あなたはそれらをキャッチすることはできません。致命的で致命的ではないですね。 – RiggsFolly

+0

ありがとうございます。最後のパラグラフでも、私は物事を混ぜていました。私が得たエラーはExceptionから来ていると思っていましたが、実際にはPHPエラーでした。これは意味があります。 –

関連する問題