gpt4 book ai didi

php - 尽管有 at 运算符 @,如何使禁用功能的错误记录静音?

转载 作者:搜寻专家 更新时间:2023-10-31 20:58:25 24 4
gpt4 key购买 nike

有谁知道如何让禁用的函数(在我的例子中是 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'ed 行 81:

@ini_set( 'unserialize_callback_func', 'spl_autoload_call' );

我是服务器管理员,几年前我禁用了 ini_set(),我对此没有问题,我只是想忽略该脚本上的错误记录。 +100 所有包含 ini_set() 的 WP 站点都没有报告任何错误,只有这个特定的错误,尽管 ini_set() 之前有 @。

最佳答案

error control operator @ 通常会抑制错误消息,但是使用 set_error_handler 定义的自定义错误处理程序仍然可以通过 error_log 记录错误.

error_reporting如果触发错误的调用前面有 @,则返回 0。错误处理函数应该在记录错误之前检查:

if (error_reporting()) {
// Report the error
error_log(...)
}

查看下面的日历代码,您可以看到 error_log调用非 fatal error 。您可以简单地为 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() 并造成混淆,原因甚至是该行与实际抛出的错误无关。

关于php - 尽管有 at 运算符 @,如何使禁用功能的错误记录静音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com