Bug #50921 [Com]: '200 OK' HTTP status despite PHP error

From: Date: Mon, 25 May 2015 17:33:27 +0000
Subject: Bug #50921 [Com]: '200 OK' HTTP status despite PHP error
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-192883@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=50921&edit=1

 ID:                 50921
 Comment by:         josh dot ribakoff at gmail dot com
 Reported by:        phpbug at starurl dot com
 Summary:            '200 OK' HTTP status despite PHP error
 Status:             Re-Opened
 Type:               Bug
 Package:            HTTP related
 Operating System:   *
 PHP Version:        5.2.12
 Block user comment: N
 Private report:     N

 New Comment:

+1

This is a BUG in my books. Until it is fixed, I can't simply tail an error log. Instead
I'd have to go manually exercise every feature & invoke every code path in my app &
painstakingly analyze the network responses of all my ajax calls to detect any possible errors.
Horrible.


Previous Comments:
------------------------------------------------------------------------
[2014-07-09 23:00:27] yohgaki@php.net

See also
https://bugs.php.net/bug.php?id=61417

------------------------------------------------------------------------
[2014-07-08 20:38:33] jonathan at spoonity dot com

Ah yes, I remember that. The IE limit a minimum of 512 byte of data to show  the outputted data.
Perhaps there could be an ini setting to choose if the status code will be 200 or 500, with the
default being the current behaviour?

------------------------------------------------------------------------
[2014-07-08 19:28:31] tyrael@php.net

here is the thread I've started about this behavior:
http://www.serverphorums.com/read.php?7,965893
it turned out that we added the explicit display_errors check for not setting the http 500 response
code because Internet Explore will show a custom error page for non-2xx responses if the length of
the response body is less than an arbitrary threshold, hence it won't show the error message if
we set the http 500.
I don't think that this change was a good idea back then, but it is possible that changing it
now would cause more harm than good.
I will keep this ticket open until we either reach a consensus that this should be fixed in a future
release, or should be kept as-is and the documentation is updated to reflect current behavior.

------------------------------------------------------------------------
[2014-07-08 17:19:55] jonathan at spoonity dot com

A workaround for those interested is the following:

register_shutdown_function(function() {
    $error = error_get_last();
    if ($error['type'] == E_ERROR) {
        header('HTTP/1.1 500 Internal Server Error');
    }
});

Be nice to see this fixed without this workaround though.

------------------------------------------------------------------------
[2014-06-25 08:57:49] tyrael@php.net

oh, it seems we are explicitly checking for display_errors when setting the 500 response code:
http://lxr.php.net/xref/PHP_5_4/main/main.c#1154
I will ask the others on the internals list for the reason for this.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=50921


--
Edit this bug report at https://bugs.php.net/bug.php?id=50921&edit=1


Thread (33 messages)

« previous php.bugs (#192883) next »