|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-06-03 01:56 UTC] 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Nov 07 14:00:02 2025 UTC |
You can set HTTP response code by header("HTTP/ ") and that's what is documented. "The HTTP status header line will always be the first sent to the client" is pointing to this header("HTTP/ "), not header("Status: ").