Apache/PHP returns HTTP Status Code 200 on error pages

Dan Bowling picture Dan Bowling · Mar 10, 2015 · Viewed 8k times · Source

I'm running PHP 5.4 on CentOS 7 and when there is a php file that throws an error (either an exception, or a syntax error) it returns an HTTP 200 status code instead of 500.

How can I get it to return a 500 server error when PHP encounters an error?

I've tried looking at other Stackoverflow posts, and they all seem to point to solutions around returning your own 500 error code (which I believe should be the normal behavior of PHP on it's own without me needing to manually fire the http header, as per this info: PHP emitting 500 on errors - where is this documented?) It also points to Xdebug as being a possible issue, but my problem persists even when I rebuild the server without Xdebug.

The relevant settings I have are:

  • display_errors: on
  • display_startup_errors: on
  • error_reporting: -1 (this causes all errors to be reported)

Answer

Dan Bowling picture Dan Bowling · Mar 10, 2015

According to a PHP bug report, the behavior described here is due to how display_errors is set.

[2010-02-03 19:03 UTC] [email protected]

The reason why display errors needs to be turned of, is because displayed errors generate output, and output causes the headers to be send out. I'm afraid we can't do much about this.

So the answer to the question is that:

  • When display_errors is on it will return 200 always.
  • When display_errors is off it will return 500.