@错误抑制运算符和set_error_handler [英] @ error suppression operator and set_error_handler

查看:81
本文介绍了@错误抑制运算符和set_error_handler的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遵循良好的编程习惯,并且将PHP错误记录到文件中,而不是向用户显示.我为此使用set_error_handler().

I am following good programming practices and I am logging the PHP errors to file instead of displaying it to user. I use set_error_handler() for that.

现在是问题所在.例如,我在某处:

Now the problem. For example, I have somewhere:

@file_exists('/some/file/that/is/outside/openbasedir.txt');

但是,尽管有错误抑制运算符,但仍会记录错误消息.我不要我希望抑制的错误不会传递给我的错误处理程序.

But despite the error suppression operator, the error message logs. I don't want that. I want suppressed errors not to pass to my error handler.

推荐答案

@运算符将error_reporting临时设置为0,因此您可以在错误处理程序中测试error_reporting的值:

The @ operator temporarily sets error_reporting to 0, so you can test the value of error_reporting in your error handler:

if (ini_get('error_reporting') == 0) {
    return;
}

甚至更好的是,仅记录error_reporting中的错误类型:

Or even better, log only error types that are in error_reporting:

$error_reporting = ini_get('error_reporting');

if ( !($error_reporting & $errno) ) {
    return;
}


还要查看 log_errors error_log 选项,用于将错误自动记录到文件或syslog.


Also take a look at the log_errors and error_log options, for automatically logging errors to a file or to syslog.

这篇关于@错误抑制运算符和set_error_handler的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆