我在使用 phpfpm 设置 docker 容器以将错误处理推迟到我的 php 应用程序时遇到了困难。
任何致命异常都由 xdebug 堆栈跟踪处理(http://xdebug.org/docs/stack_trace) 作为 200 OK,但是我想让 php 处理程序处理错误(我想将错误重构为 json,并将响应代码设置为 500)。
如果我display_errors = Off
在 php.ini 中设置,我会得到一个好的代码 500,但没有错误传递到应用程序层(死机白屏)。
对于上述两种情况,日志记录均按预期工作。
要明确的是,一切都正常运转(快乐路径运行良好)但是当我故意导致致命错误(将来可能会发生)时我遇到了问题。
我应该如何配置 phpfpm/nginx 以确保致命错误由 php 应用程序处理?
PHP-FPM 配置(dockerfile):https://github.com/nglume/docker-phpfpm/blob/master/Dockerfile
nginx配置:https://github.com/nglume/docker-nginx/blob/master/config/nginx.conf
虚拟主机:https://github.com/nglume/nglume/blob/master/vhosts/nginx/nglume-api.local.conf
谢谢!
答案1
问题是由于 phpfpm 池状态php_flag[display_errors]
为和lumen 应用程序没有注册处理程序register_shutdown_function
(它确实有一set_error_handler
组)。
看https://laracasts.com/discuss/channels/lumen/lumen-debug-mode-not-showing-stack-trace了解更多信息