How can I tell PHP to dump exceptions as raw text

2019-01-19 14:11发布

问题:

When I'm developing my REST API in PHP I'm working with application/json output, so when I get errors while testing in the browser they look like this:

<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;
}

And it gets worse when I get large stack traces and stuff. So is there a flag I can set telling PHP that I want my errors unescaped and in raw text?

回答1:

It is a php.ini setting called html_errors.



回答2:

In your php.ini you can set three different settings to change how HTML errors are displayed.

  • html_errors
  • error_prepend_string String to output before an error message
  • error_append_string String to output after an error message

I use the following in my development environment:

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


回答3:

There may be some configuration option that I can't find to do this - I suspect there is, since the HTML is not present on the command line.

A dirty work around is to pass the strings through html_entity_decode(strip_tags($str)).

EDIT As Andy Pieters has pointed out (he is obviously better at reading docs than I am) there is a configuration option called html_errors to control this. I will leave this answer here in case for some reason you cannot modify this, but you should probably accept his answer.