From:             c dot c dot dean at durham dot ac dot uk
Operating system: Linux
PHP version:      5.2.9
PHP Bug Type:     HTTP related
Bug description:  PHP CGI fails to ever output HTTP 200 header

Description:
------------
If you invoke header("HTTP/1.0 200 OK"); from PHP in CGI mode, the header
is never output, because it's suppressed at line 379 in
sapi/cgi/cgi_main.c.  If you use any value other than 200, it is output
correctly.

This means for instance, that if you use PHP in CGI mode as an Apache
errordocument handler, you cannot send back a non-error 200 OK to the
user.

The following trivial change fixes this, but you might prefer a more
elegant solution.

--- php-5.2.9/sapi/cgi/cgi_main.c.orig   2009-01-19 18:17:59.000000000
+0000
+++ php-5.2.9/sapi/cgi/cgi_main.c       2009-03-09 14:04:11.000000000
+0000
@@ -376,7 +376,7 @@
                return  SAPI_HEADER_SENT_SUCCESSFULLY;
        }

-       if (CGIG(nph) || SG(sapi_headers).http_response_code != 200)
+       if (CGIG(nph) || SG(sapi_headers).http_response_code != 666)
        {
                int len;
                zend_bool has_status = 0;
@@ -914,7 +914,7 @@
        SG(request_info).request_uri = NULL;
        SG(request_info).content_type = NULL;
        SG(request_info).content_length = 0;
-       SG(sapi_headers).http_response_code = 200;
+       SG(sapi_headers).http_response_code = 666;

        /* script_path_translated being set is a good indication that
           we are running in a cgi environment, since it is always


Reproduce code:
---------------
Use this as the Apache errordocument handler:

<?php
  header("HTTP/1.0 200 OK");
  echo "This is OK";
?>


Expected result:
----------------
HTTP/1.0 200 OK in the header and "This is OK" in the body

Actual result:
--------------
HTTP/1.0 404 Not Found

-- 
Edit bug report at http://bugs.php.net/?id=47605&edit=1
-- 
Try a CVS snapshot (PHP 5.2):        
http://bugs.php.net/fix.php?id=47605&r=trysnapshot52
Try a CVS snapshot (PHP 5.3):        
http://bugs.php.net/fix.php?id=47605&r=trysnapshot53
Try a CVS snapshot (PHP 6.0):        
http://bugs.php.net/fix.php?id=47605&r=trysnapshot60
Fixed in CVS:                        
http://bugs.php.net/fix.php?id=47605&r=fixedcvs
Fixed in CVS and need be documented: 
http://bugs.php.net/fix.php?id=47605&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=47605&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=47605&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=47605&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=47605&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=47605&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=47605&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=47605&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=47605&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=47605&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=47605&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=47605&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=47605&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=47605&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=47605&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=47605&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=47605&r=mysqlcfg

Reply via email to