ID: 33225 Updated by: [EMAIL PROTECTED] Reported By: phpbugs at thequod dot de Status: Open -Bug Type: Documentation problem +Bug Type: CGI related Operating System: * PHP Version: 5.0.4 New Comment:
Could you please check the last comment please? And then return the bug to us if needed. Thanks, Nuno Previous Comments: ------------------------------------------------------------------------ [2005-06-05 13:45:31] phpbugs at thequod dot de 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". ------------------------------------------------------------------------ [2005-06-03 23:18:04] [EMAIL PROTECTED] 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