如何强制PHP将致命错误呈现为纯文本?
在我的开发机器上,我将PHP设置为显示所有错误(即,如何强制PHP将致命错误呈现为纯文本?,php,Php,在我的开发机器上,我将PHP设置为显示所有错误(即,display\u errors设置为On)。不幸的是,PHP以text/html的形式发送致命错误,这使得读取调用堆栈有点痛苦,因为html中忽略了空格 对于致命错误,有没有办法让PHP以文本/普通的形式发送页面?设置您自己的错误处理程序,然后设置所需的mime类型或输出介于标记之间的所有内容。不幸的是,您无法在PHP中截获致命错误。正如Mike Purcell所说,关闭PHP配置可能会允许您返回无格式的简单错误消息。PHP.net的set\
display\u errors
设置为On
)。不幸的是,PHP以text/html
的形式发送致命错误,这使得读取调用堆栈有点痛苦,因为html中忽略了空格
对于致命错误,有没有办法让PHP以
文本/普通的形式发送页面?设置您自己的错误处理程序,然后设置所需的mime类型或输出介于
标记之间的所有内容。不幸的是,您无法在PHP中截获致命错误。正如Mike Purcell所说,关闭PHP配置可能会允许您返回无格式的简单错误消息。PHP.net的set\u error\u handler()
项建议用于捕获致命错误。果然奏效了
register_shutdown_function('plain_text_error');
function plain_text_error() {
if ($e = error_get_last()) {
header('Content-Type: text/plain');
}
}
我创建了一个文件,error.php
,其中包含以下内容:
php_value auto_prepend_file /path/to/error.php
然后将以下内容添加到我的开发站点的.htaccess
文件中:
瞧,以纯文本形式呈现的致命错误。是否打开了html\u错误
php--ini | fgrep html_error
@MikePurcell我现在做的事情:虽然我问了如何获取纯文本错误消息,但这实际上实现了我想做的事情的精神。谢谢这完全是一种猜测,是什么促使我这么问的,就是你所说的“这让阅读调用堆栈有点痛苦”。老实说,我使用XDebug,这使得读取堆栈跟踪非常容易。“你介意我把它作为一个接受的解决方案吗?”@MikePurcell It从技术上说并不能回答所问的问题,而且在事实发生后重写这个问题对那些已经回答的人来说是不公平的。我想我可以问一个关于如何在PHP中显示打印错误的新问题……不,没关系。甚至问lol都觉得自己像个得分妓女。使用set\u error\u handler()
似乎不会拦截E\u error
s。关闭html\u errors
不会将页面的mimetype设置为text/plain
,这就是我问这个问题的原因。