error_reporting(E_ALL) 失败,没有日志或错误消息

error_reporting(E_ALL) fails with no log or error message

我正在使用 WordPress REST API 并在我的主插件文件中设置:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

我遇到了一些奇怪的行为。例如在 function/endpoint 我有类似的东西:

function test($request){
    $request['id'] <- this works fine here

    but if I add another function like this I get a silent error

    $validID = check_id($request['id']);
}

所以当我这样做时,端点的 return 是空白的,我得到这个错误:

has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 

现在,如果我将 error_reporting 设置为:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

我的端点工作正常。不确定这里发生了什么。我没有收到任何 php 错误日志,这使得故障排除变得非常困难。那么我不应该使用 E_ALL 吗?

我还通过省略分号来测试端点。我得到了相同的结果,只是现在 error_reporting(E_ALL) 和 error_reporting(E_ERROR | E_WARNING | E_PARSE 的响应都是空的).我很想得到某种 log/return 来告诉我哪里出了问题。

不幸的是,很多 WordPress 代码都是在没有启用 WP_DEBUG 的情况下编写的,这意味着没有 E_ALL 级别。因此,它往往充满了开发人员看不到且懒得更正的通知和弃用问题。

因此,提出错误报告通常会触发与您自己的代码完全无关的问题。

由于您的直接问题是缺少明显的错误 message/log,您应该尝试 WP_DEBUG_DISPLAYWP_DEBUG_LOG 配置以查看是否有帮助。

通常最好使用常量来集中控制 WP 的错误处理。当扩展开始与此混淆时,它是......好吧,一团糟。 :)

您可以尝试的另一件事是专用的错误处理程序。我制作并使用了一个 wps 插件,它为 WP 上下文包装了 whoops 处理程序。对于 API 错误,它会尝试覆盖输出并 return 对发生的事情进行有意义的跟踪。