【发布时间】:2020-04-24 10:06:01
【问题描述】:
在 PHP 7.4.0 中,我看到以下警告:Deprecated: Array and string offset access syntax with curly braces is deprecated in ...
我的错误/异常处理程序无法捕获和记录它们。
示例:
<?php
set_error_handler(function ($errNo, $errStr) {
echo "set_error_handler: " . $errStr;
});
set_exception_handler(function ($exception) {
echo "set_exception_handler: " . $exception->getMessage();
});
$b = 'test';
$a = $b{1};
警告仍然显示在正常输出中,并且没有调用两个处理程序。
我想在我自己的日志中记录所有错误、异常和警告,但处理程序没有捕获到这个警告。是否有这样做的原因或解决方案来捕获并记录 PHP 抱怨的所有内容(无法访问服务器 Apache/PHP 日志)?
【问题讨论】:
-
可能是因为这是在解析过程中检测到的,而不是在运行时检测到的。
-
Related question (不标记为骗子以防万一,因为 0 upvote + 没有亲自尝试答案中给出的方法)
-
@Jeto:链接的答案不起作用,因为在我的案例/示例中从未调用过处理程序。
-
有很多错误无法用
set_error_handler()捕获:以下错误类型不能用用户定义的函数处理:E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、 E_COMPILE_WARNING,以及在调用 set_error_handler() 的文件中引发的大部分 E_STRICT。 所以你不应该依赖它来向用户隐藏错误。