尽管有 at 运算符 @,如何使禁用功能的错误记录静音?
How to mute error logging of a disabled function despite an at operator @?
有人知道如何让禁用的功能(在我的例子中 ini_set()
)停止抛出错误吗?我通常喜欢 @ini_set()
但在这个 WP 插件上,它仍然用 error_log 填充:
[30-Apr-2018 12:01:39 UTC] All-in-One Event Calendar: ini_set() has been disabled for security reasons @ /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(),我对此没有问题,我只是想忽略该脚本上的错误记录。所有包含 ini_set() 的 +100 WP 站点都没有报告任何错误,只有这个特定的错误,尽管 ini_set().
之前有 @
error control operator @
would normally suppress the error message, however a custom error handler defined with set_error_handler
can still cause the error to be logged via error_log
。
如果触发错误的调用前面有 @
,error_reporting
将 return 0。错误处理函数应该在记录错误之前检查:
if (error_reporting()) {
// Report the error
error_log(...)
}
查看下面的日历代码,您可以看到 error_log
被调用用于非致命错误。您可以简单地在该脚本中添加对 error_reporting
的检查。
或者您可以禁用该页面的 error_log
or re-enable ini_set
。
POST MORTEM 编辑: 值得注意的是,尽管错误日志指定错误是由 ini_set() 被禁用引起的,但错误源自有问题的 ini_set() 中定义的函数回调的更深层(OP 中显示的第 81 行)。所以基本上,错误甚至根本不相关。它冒泡到 ini_set() 并造成混淆,因为原因甚至该行与实际抛出的错误无关。
有人知道如何让禁用的功能(在我的例子中 ini_set()
)停止抛出错误吗?我通常喜欢 @ini_set()
但在这个 WP 插件上,它仍然用 error_log 填充:
[30-Apr-2018 12:01:39 UTC] All-in-One Event Calendar: ini_set() has been disabled for security reasons @ /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(),我对此没有问题,我只是想忽略该脚本上的错误记录。所有包含 ini_set() 的 +100 WP 站点都没有报告任何错误,只有这个特定的错误,尽管 ini_set().
之前有 @error control operator @
would normally suppress the error message, however a custom error handler defined with set_error_handler
can still cause the error to be logged via error_log
。
@
,error_reporting
将 return 0。错误处理函数应该在记录错误之前检查:
if (error_reporting()) {
// Report the error
error_log(...)
}
查看下面的日历代码,您可以看到 error_log
被调用用于非致命错误。您可以简单地在该脚本中添加对 error_reporting
的检查。
或者您可以禁用该页面的 error_log
or re-enable ini_set
。
POST MORTEM 编辑: 值得注意的是,尽管错误日志指定错误是由 ini_set() 被禁用引起的,但错误源自有问题的 ini_set() 中定义的函数回调的更深层(OP 中显示的第 81 行)。所以基本上,错误甚至根本不相关。它冒泡到 ini_set() 并造成混淆,因为原因甚至该行与实际抛出的错误无关。