私の開発マシンでは、すべてのエラーを表示するようにPHPを設定しています(display_errors
はon
に設定されています)。残念ながら、PHPは致命的なエラーをtext/html
として送信します。これは、HTMLで空白が無視されるため、コールスタックを読みにくくします。致命的なエラーをプレーンテキストとして表示するにはどうすればよいですか?
PHPに致命的なエラーのためにtext/plain
というページを送信させる方法はありますか?
私の開発マシンでは、すべてのエラーを表示するようにPHPを設定しています(display_errors
はon
に設定されています)。残念ながら、PHPは致命的なエラーをtext/html
として送信します。これは、HTMLで空白が無視されるため、コールスタックを読みにくくします。致命的なエラーをプレーンテキストとして表示するにはどうすればよいですか?
PHPに致命的なエラーのためにtext/plain
というページを送信させる方法はありますか?
PHP.netのset_error_handler()
にあるfew people in the commentsのエントリは、致命的なエラーをキャプチャするためにregister_shutdown_function()
を使用することを推奨します。確かに、それは働いた。
私は次のように、ファイル、error.php
を作成:
php_value auto_prepend_file /path/to/error.php
出来上がり、プレーンテキストとしてレンダリング致命的なエラー:
register_shutdown_function('plain_text_error');
function plain_text_error() {
if ($e = error_get_last()) {
header('Content-Type: text/plain');
}
}
はその後、私のdevのサイトの.htaccess
ファイルに次を追加しました。
http://php.net/manual/en/function.set-error-handler.php独自のエラーハンドラを設定し、希望するMIMEタイプを設定するか、すべてを<pre></pre>
タグの間に設定します。
'set_error_handler()'を使っても 'E_ERROR'は傍受されていないようです。 –
残念ながら、PHPでは致命的なエラーを傍受することはできません。 Mike Purcell氏によると、PHP設定でhtml_errorsをオフにすると、フォーマットせずにプレーンエラーメッセージが返される可能性があります。
'html_errors'をオフにしても、ページのMIMEタイプが' text/plain'に返されるようには設定されていません。 –
'html_errors'がオンになっていますか? 'php --ini | fgrep html_error' –
@MikePurcell私は今プレーしています:プレーンテキストのエラーメッセージを受け取る方法について尋ねましたが、それは実際に私がうまくやりたいことの精神を実際に達成します。ありがとう! –
全体的な推測でしたが、それは "あなたがコールスタックを少し苦労して読めるようにする"ということでした。すべての正直なところで私はXDebugを使用しています。これはスタックトレースを読みやすくします。受諾の解決策として投稿すればいいですか? –