web-dev-qa-db-ja.com

Apacheがphpエラーのカスタム500エラーページを表示しない

Apacheは、私が設定したカスタムエラードキュメントを表示したくありません。

私の仮想ホストには

    DocumentRoot /var/www/site/public
    ...
    ErrorDocument 500 /500.html

500.htmlは/var/www/site/public/500.htmlにあります

これをテストするために、500ヘッダーを返す壊れたphpページを作成しましたが、ページは空白です。これは、Apacheではなくphpが500ページを生成した結果だと思います。では、どうすればphpでカスタムApacheエラードキュメントを表示できますか?

3
spetz

PHPエラーは5xxサーバーエラーとは見なされないため、これは正常な動作です。 RFC 7231 によると

6.6。サーバーエラー5xx

ステータスコードの5xx(サーバーエラー)クラスは、サーバーがエラーを認識しているか、要求されたメソッドを実行できないことを示しています。 ---

6.6.1。 500内部サーバーエラー

500(内部サーバーエラー)ステータスコードは、サーバーが予期しない状態に遭遇したために要求を実行できなかったことを示します。

PHPエラーはセキュリティ上の問題を引き起こす可能性があるため、常に修正する必要があります。同じ理由で、phpエラーを処理する際のベストプラクティスは、プログラマーがそれらを確認してユーザーから隠すことができるようにログに記録することです。この種のセットアップは(php.ini形式で)次のようになります。

error_reporting = E_ALL
log_errors = On
display_errors = Off

これにより、Webサーバーのエラーログまたは構成された他のエラーログにエラーが記録されます。サイトからそれらを読み取る代わりに、ページのロード中にログファイルに対してtail -fを実行できます。

2
Esa Jokinen