如何告诉PHP将异常转储为原始文本而不是HTML


How can I tell PHP to dump exceptions as raw text instead of HTML?

当我在PHP中开发REST API时,我使用的是application/json输出,所以当我在浏览器中测试时遇到错误时,它们看起来像这样:

<b>Fatal error</b>: Uncaught exception 'Exception' with message 'PDO caught an error:
array(3) {
  [0]=&gt;
  string(5) &quot;42000&quot;
  [1]=&gt;
  int(1065)
  [2]=&gt;
  string(15) &quot;Query was empty&quot;
}

当我得到大的堆栈痕迹和其他东西时,情况会变得更糟。那么,有没有一个我可以设置的标志告诉PHP,我希望我的错误不被显示在原始文本中?

这是一个名为html_errorsphp.ini设置。

php.ini中,您可以设置三种不同的设置来更改HTML错误的显示方式。

  • html_errors
  • error_prepend_string错误消息前输出的字符串
  • error_append_string错误消息后输出的字符串

我在我的开发环境中使用以下内容:

html_errors = On
error_prepend_string = "<pre>"
error_append_string = "</pre>"

可能有一些配置选项我找不到——我怀疑有,因为HTML不在命令行中。

一个棘手的问题是通过html_entity_decode(strip_tags($str))传递字符串。

EDIT正如Andy Pieters所指出的(他显然比我更擅长阅读文档),有一个名为html_errors的配置选项可以控制这一点。我将把这个答案留在这里,以防出于某种原因你无法修改,但你可能应该接受他的答案。