As I sayed, my patch was not suggusted as fix, Dmitry is write about possible 
side effetcs, it was added only to prove that the problem is what we think it 
is.

On Monday, January 30, 2012 05:42:11 PM Dmitry Stogov wrote:
> Hi Mike,
> 
> I confirm the bug. In case of empty output HTTP headers are sent to
> stdout or stderr instead of FastCGI stream.
> 
> To reproduce I configured nginx to use PHP FastCGI server on UNIX
> socket, then launched (sapi/cgi/php-cgi -b /tmp/fcgi-php5) and performed
> several request to empty PHP file. The HTTP headers were printed in
> console running PHP.
> 
> [dmitry@tpl2 CGI-DEBUG]$ sapi/cgi/php-cgi -b /tmp/fcgi-php5
> X-Powered-By: PHP/5.4.0RC7-dev
> Content-type: text/html
> 
> X-Powered-By: PHP/5.4.0RC7-dev
> Content-type: text/html
> 
> I afraid Yoram's patch is too radical and may have side effects.
> Mike, could you please think about a safer way of fixing.
> 
> Thanks. Dmitry.
> 
> On 01/30/2012 07:29 PM, yoram bar haim wrote:
> > I Debugged the issue described here by lior.
> > the problem is :
> > in php_request_shutdown() we call
> > 
> >       sapi_send_headers() after
> >       php_output_deactivate().
> > 
> > at this point,
> > in main/output.c,
> > OG(flags)&  PHP_OUTPUT_ACTIVATED is false so
> > 
> >        php_output_write_unbuffered() calls
> >        
> >                php_output_stderr() instead of
> >                sapi_module handler.
> > 
> > the following patch solves the issue but It might be a wrong solution
> > (because other thins are dependent on this order) so I'm not suggesting
> > it as fix.
> > 
> > --- main/main.c.orig    2012-01-30 17:25:44.000000000 +0200
> > +++ main/main.c 2012-01-30 17:09:05.000000000 +0200
> > @@ -1738,12 +1738,13 @@
> > 
> >                  } else {
> >                  
> >                          php_output_end_all(TSRMLS_C);
> >                  
> >                  }
> > 
> > +               sapi_send_headers(TSRMLS_C);
> > 
> >                  php_output_deactivate(TSRMLS_C);
> >          
> >          } zend_end_try();
> >          
> >          /* 4. Send the set HTTP headers (note: This must be done AFTER
> > 
> > php_output_discard_all() / php_output_end_all() !!) */
> > 
> >          zend_try {
> > 
> > -               sapi_send_headers(TSRMLS_C);
> > +/*             sapi_send_headers(TSRMLS_C); */
> > 
> >          } zend_end_try();
> >          
> >          /* 5. Reset max_execution_time (no longer executing php code
> >          after
> > 
> > response sent) */

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to