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] [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

Reply via email to