如何在 at 运算符 @ 的情况下将禁用函数的错误日志记录静音?



有没有人知道如何使禁用的函数(在我的情况下ini_set()(停止抛出错误?我通常像@ini_set()一样使用它,但在这个 WP 插件上,它仍然用以下内容填充error_log:

[30-四月-2018 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检查即可。

https://github.com/wp-plugins/all-in-one-event-calendar/blob/86c4e20dab7b199b20207fb3918a8807f7342fab/lib/exception/handler.php#L287

或者,您可以禁用该页面的error_log或重新启用ini_set

事后编辑:值得注意的是,尽管错误日志指定错误是由禁用ini_set((引起的,但该错误源于相关ini_set((中定义的函数的回调(OP中显示的第81行(。 所以基本上,错误甚至根本不相关。 它冒泡到 ini_set(( 并造成混乱作为原因,甚至该行也不是关于实际抛出的错误。

最新更新