php - 尽管有 at 运算符@,如何静音禁用功能的错误日志记录?
问题描述
有人知道如何使禁用的功能(在我的情况下ini_set()
)停止抛出错误吗?我通常喜欢它,@ini_set()
但在这个 WP 插件上,它仍然用以下内容填充 error_log:
[2018 年 4 月 30 日 12:01:39 UTC] 多合一事件日历:出于安全原因,ini_set() 已被禁用 @ /home/burp/public_html/wp-content/plugins/all-in-one-事件日历/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() 之前有 @。
解决方案
错误控制操作员 通常会抑制错误消息,但是定义的@
自定义错误处理程序set_error_handler
仍然可以导致错误通过error_log
.
error_reporting
如果触发错误的调用前面带有@
. 错误处理函数应该在记录错误之前检查:
if (error_reporting()) {
// Report the error
error_log(...)
}
查看下面的日历代码,您可以看到它error_log
是针对非致命错误调用的。error_reporting
您可以简单地在该脚本中添加一个检查。
或者,您可以禁用error_log
或重新启用ini_set
该页面。
事后编辑:值得注意的是,尽管错误日志指定错误是由禁用 ini_set() 引起的,但该错误源自相关 ini_set() 中定义的函数回调的更深层次(显示的第 81 行在 OP 中)。所以基本上,这个错误甚至根本不相关。它冒泡到 ini_set() 并造成混乱作为原因,甚至该行与实际抛出的错误无关。
推荐阅读
- spring - 如何在spring boot的application.yml中配置cassandra?
- magento - Magento 2 - isSalable() 函数背后的逻辑是什么?
- spring-boot - @EnableWebSocket 和 @EnableWebSocketMessageBroker 有什么区别
- javascript - 编写一个正则表达式来匹配这些 ?, ~, ^, | 和 *
- javascript - 如何将 json 数据中的空格替换为 _ 并使用数据表为每一行添加超链接?
- java - 获取 JSON 对象的特定对象(XML 类型)
- yii2 - Yii2 自动更改用户密码
- api - 我的包中的 Swagger-YAML 错误映射条目
- ios - React Native IOS 11.3 - 11.4 错误:JavaScriptCore JSC::JSLock::DropAllLocks::DropAllLocks
- if-statement - IF 语句 - 如何减少/简化源代码量