Apache 和 PHP-FPM 拦截错误,并且不在开发环境中显示我友好的 PHP 错误页面输出

Apache 和 PHP-FPM 拦截错误,并且不在开发环境中显示我友好的 PHP 错误页面输出

这个问题周围有太多静态信息,很难找到真正适用的答案,所以如果有答案的话我很抱歉,只是我一直找不到它。

我的情况是,当应用程序发生错误时,我想在页面上显示它们......在我们的开发环境中.... 我不需要被告知只将它们发送到日志,这在开发过程中会浪费大量时间,而且格式化后还需要从日志中读取它们。 我们当然会在生产中关闭此功能。

我的错误确实被记录了,这不是问题,问题是,在 Apache 使用 503 响应代码重定向它们之前,它们没有被显示,很可能是因为 PHP/FPM 因我们没有正确捕获的致命错误而死亡。

在转移到 PHP-FPM 之前,任何类型的错误显示都没有问题,我们已经在/etc/php.ini...中采用了标准设置。

error_reporting = E_ALL
error_display_errors = On
display_startup_errors = On
log_errors = On

我的异常/错误处理程序运行良好,我可以访问堆栈跟踪详细信息、额外元数据等,但是现在我已启用 PHP-FPM,Apache 似乎正在捕获返回的 http 503 状态,并重定向到通用 apache 错误消息。我尝试使用...

errordocument 503 /error.php?...

... 但这会丢失状态,因此我无法获得shutdown我通常使用的处理程序中通常会获得的所有详细信息。我已将以下内容添加到 FPM 池定义中...

php_admin_flag[display_errors] = On
php_admin_flag[log_errors] = On

...但它们没有效果。 php_info()显示主值和本地值均按预期工作,因此这不是错误配置,也不是某处错误的包含文件。

我做错了什么,我怎样才能阻止 apache 转发到它自己的错误处理程序并仅显示 PHP-FPM 的输出,并扩展我自己的错误处理程序?

Apache:  2.4.37-21
PHP/FPM: 7.3.5-5

相关内容