提问人:that-ben 提问时间:4/30/2018 最后编辑:that-ben 更新时间:4/30/2018 访问量:364
尽管有 at 运算符 @,如何静音禁用函数的错误日志记录?
How to mute error logging of a disabled function despite an at operator @?
问:
有没有人知道如何使禁用的功能(在我的情况下)停止抛出错误?我通常喜欢它,但在这个 WP 插件上,它仍然用以下内容填充error_log:ini_set()
@ini_set()
[2018 年 4 月 30 日 12:01:39 UTC]多合一活动日历:出于安全原因,ini_set() 已被禁用 @ /home/burp/public_html/wp-content/plugins/all-in-one-event-calendar/all-in-one-event-calendar.php:81 #2
我怀疑这是因为该ini_set实际上设置了一个回调函数,并且在定义的 ini_set() 函数中调用了另一个 ini_set()。这是有问题的error_log第 81 行:
@ini_set( 'unserialize_callback_func', 'spl_autoload_call' );
我是服务器管理员,几年前我禁用了 ini_set(),我对此没有问题,我只想将该脚本上的错误日志记录静音。+100 个都包含 ini_set() 的 WP 站点没有报告任何错误,只有这个特定的错误,尽管 ini_set() 之前有 @。
答:
错误控制运算符通常会禁止显示错误消息,但是使用 set_error_handler
定义的自定义错误处理程序仍可能导致通过error_log
记录错误。@
如果触发错误的调用前面有 error_reporting
,则返回 0。错误处理功能应在记录错误之前检查:@
if (error_reporting()) {
// Report the error
error_log(...)
}
查看下面的日历代码,您可以看到 error_log
是为非致命错误调用的。您可以简单地在该脚本中添加对error_reporting
的检查。
或者,您可以禁用该页面的error_log
或重新启用ini_set
。
事后编辑:值得注意的是,尽管错误日志指定错误是由 ini_set() 被禁用引起的,但该错误源自相关 ini_set() 中定义的函数的回调(OP 中显示的第 81 行)。所以基本上,这个错误甚至根本不相关。它冒泡到 ini_set() 并造成混淆,因为原因甚至该行都与实际抛出的错误无关。
评论
@
if (error_reporting())
error_log
评论
@