#33225 [Opn]: PHP sends multiple Status headers
| From: | phpbugs at thequod dot de | Date: | Sun, 05 Jun 2005 11:45:33 +0000 |
| Subject: | #33225 [Opn]: PHP sends multiple Status headers | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969368424@lists.php.net to get a copy of this message | ||
ID: 33225
User updated by: phpbugs at thequod dot de
Reported By: phpbugs at thequod dot de
Status: Open
Bug Type: Documentation problem
Operating System: *
PHP Version: 5.0.4
New Comment:
Sniper, please use a FastCGI-compiled PHP-CGI binary and
don't inspect the Apache output.
If you would have been running php-fastcgi on your Apache2
server you would've gotten a "Internal server error",
because fastcgi dies on multiple Status headers.
It's not only a documentation problem, but causes Internal
Server errors with Apache and fastcgi, because fastcgi is
very strict about the "There has to be exact one status
code in the cgi response".
Previous Comments:
------------------------------------------------------------------------
[2005-06-03 23:18:04] sniper@php.net
Here's what I get with Apache2 and your script:
HTTP/1.1 302 Found
Date: Fri, 03 Jun 2005 21:15:54 GMT
Server: Apache/2.0.52 (Fedora)
X-Powered-By: PHP/5.1.0-dev
Status: 301
Location: http://www.example.org
Connection: close
Content-Type: text/html; charset=ISO-8859-1
IMO, this is not a bug in either SAPI. Just documentation issue.
------------------------------------------------------------------------
[2005-06-03 01:56:26] phpbugs at thequod dot de
Description:
------------
Multiple "Status" lines get send when
using "header('Location: url')", which produces an
additional 302 (REDIRECT) status code.
This causes FastCGI (at least) to produce a 500 Internal
Server Error:
FastCGI: comm with server "/path/to/fcgi-starter" aborted:
error parsing headers: duplicate header 'status'
Documentation
(http://us2.php.net/manual/en/function.header.php) says:
Note: The HTTP status header line will always be the
first sent to the client [[NOT TRUE! - reproduce: echo
"<?php header('Status: 304'); ?>" | php5/bin/php-fcgi]],
regardless of the
actual header() call being the first or not. The status
may be overridden by calling header() with a new status
line at any time unless the HTTP headers have already been
sent [[NOT TRUE! - this bug]].
-----------------------------------
configure (both PHP5 and PHP4):
./configure --enable-memory-limit
--enable-force-cgi-redirect \
--enable-track-vars --with-pcre-regex --with-mysql
--without-sqlite \
--with-zlib --with-bz2 --enable-mbstring --with-openssl
--enable-exif \
--with-dom=shared --with-ttf=shared --with-gd=shared
--enable-calendar \
--with-iconv --enable-inline-optimization
--enable-gd-native-ttf \
--with-ldap --with-ldap-sasl \
--with-gettext \
--without-mm --enable-fastcgi --prefix=/home/daniel/php5
Reproduce code:
---------------
$ cat << "?>" | php5/bin/php-fcgi
<?php
header( 'Status: 404' );
header( 'Status: 301' );
header( 'Location: http://www.example.org' );
?>
Expected result:
----------------
Status: 301
Content-type: text/html
X-Powered-By: PHP/5.0.4
Location: http://www.example.org
Actual result:
--------------
Status: 302
Content-type: text/html
X-Powered-By: PHP/5.0.4
Status: 301
Location: http://www.example.org
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=33225&edit=1