ホームページ >バックエンド開発 >PHPチュートリアル >set_error_handle および at(@) シンボルに関連する問題
set_error_handle と at(@) 記号の問題
問題は、set_error_handle を使用してシステム エラーや警告情報をログ ファイルに書き込むことです。
ただし、fopen などの一部の API では、ファイルが存在しない場合、自分で作成したエラー処理関数が実行されてしまいます。以前は、fopen の前に @ 記号が追加されており、このような問題は表示されませんでした。
set_error_handle を使用したい場合でも、@ 関数を削除できます。やり方は?
ありがとうございます
-----解決策---------
トライキャッチでキャッチ
------解決策------------------
set_error_handler を使用する場合、次の 2 つの点に注意するだけで済みます。1. set_error_handler は、php.ini で設定するか、関数を使用して設定します。 2. カスタマイズ エラー処理関数の戻り値が false の場合、PHP のデフォルトのエラー処理がトリガーされます。戻り値が true の場合、PHP のデフォルトのエラー処理はトリガーされず、煩わしいエラーは表示されません。
書き方については、こちらを参考にしてください。
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
//このエラー タイプが error_reporting に含まれていない場合
return;
}
switch ($errno) {
case E_USER_ERROR:
echo "My ERRORn";
echo " ファイル $errfile の $errline 行で致命的なエラーが発生しました";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . " )
n";
echo "中止中...
n";
exit(1);
Break;
case E_USER_WARNING:
echo "私の警告 [$errno] $errstr
n";
Break;
case E_USER_NOTICE:
echo "< b>私の通知 [$errno] $errstr
n";
Break;
デフォルト:
echo "不明なエラーの種類: [$errno] $errstr
n";
Break;
}
// false を返すと PHP のデフォルトのエラー処理がトリガーされ、true を返すとカスタム関数のみを使用して処理します。
return true;
}
set_error_handler('myErrorHandler');
fopen('/tmp/foo', 'r');
------解決策------------------
テスト後、コード #5 は要求を満たすことができます! 実行後、
fopen('/tmp/foo', 'r');
が失敗した場合、
不明なエラー タイプ: [2] fopen(/tmp/foo) [function .fopen ]: ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません
If
@fopen('/tmp/foo', 'r');
失敗すると、何も表示されません