エラー処理を PHP アプリケーションに委ねるために、phpfpm を使用して Docker コンテナを設定するのが困難です。
致命的な例外はxdebugスタックトレースによって処理されます(スタックトレース) を 200 OK として返しますが、エラーを PHP ハンドラーで処理したいと思います (エラーを json として再構築し、応答コードを 500 に設定します)。
php.ini で設定すると、display_errors = Off
コード 500 が表示されますが、これは正常ですが、アプリケーション層にエラーは渡されません (死の白い画面)。
上記の両方のケースでは、ログ記録は意図したとおりに機能しています。
明確に言えば、すべては正常に機能しています (ハッピー パスは正常に実行されています) が、意図的に致命的なエラーを発生させると (将来発生する可能性があります)、問題が発生します。
致命的なエラーが PHP アプリケーションによって処理されるようにするには、phpfpm/nginx をどのように構成すればよいですか?
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詳細情報