RE: [PHP-DEV] FW: php fastcgi
| From: | Dmitry Stogov | Date: | Wed, 13 Jun 2007 18:49:25 +0000 |
| Subject: | RE: [PHP-DEV] FW: php fastcgi | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-30167@lists.php.net to get a copy of this message | ||
Oh, sorry. The patch was filtered :)
I am sendig it again.
It is sapi independent.
Thanks. Dmitry.
> -----Original Message-----
> From: Uwe Schindler [mailto:thetaphi@php.net]
> Sent: Wednesday, June 13, 2007 9:08 PM
> To: 'Dmitry Stogov'; ceo@l-i-e.com
> Cc: 'internals Mailing List'; 'Stanislav Malyshev'; 'Andrei
> Nigmatulin'
> Subject: RE: [PHP-DEV] FW: php fastcgi
>
>
> Where is the propsed patch? I was thinking about a (not SAPI
> specific the subject indicates!!!!) modification to the
> php-output parts that sends a HTTP status "500" when a fatal
> error occurs and no output was yet send (SAPI did not start
> the response). I think there is no need for a configuration
> setting. A CGI program that crashes on startup creates error
> 500, a servlet/JSP that does not startup creates error
> 500,... In principle SAPI should return a FAILURE to the
> webserver from the handler function and set the status code
> before. The webserver then generates the default error page.
>
>
> -----
> Uwe Schindler
> thetaphi@php.net - http://www.php.net
> NSAPI SAPI developer
> Bremen, Germany
>
> > -----Original Message-----
> > From: Dmitry Stogov [mailto:dmitry@zend.com]
> > Sent: Wednesday, June 13, 2007 6:54 PM
> > To: ceo@l-i-e.com
> > Cc: 'internals Mailing List'; 'Stanislav Malyshev'; 'Andrei
> > Nigmatulin'
> > Subject: RE: [PHP-DEV] FW: php fastcgi
> >
> > Configuaratin option make sense, but PHP already has too many
> > configuration options especialliy for error reprting.
> > I would like to avoid new ones.
> >
> > Thanks. Dmitry.
> >
> > > -----Original Message-----
> > > From: Richard Lynch [mailto:ceo@l-i-e.com]
> > > Sent: Wednesday, June 13, 2007 8:17 PM
> > > To: Dmitry Stogov
> > > Cc: 'internals Mailing List'; Stanislav Malyshev; Andrei
> Nigmatulin
> > > Subject: Re: [PHP-DEV] FW: php fastcgi
> > >
> > >
> > > On Wed, June 13, 2007 2:07 am, Dmitry Stogov wrote:
> > > > Current time most PHP instalations use setting
> > > 'display_error=0'. This
> > > > setting hides errors from user but may send to him just a
> > > blank page.
> > > >
> > > > The proposed patch sends HTTP 500 response on errors
> > > instead of blank
> > > > pages. The pages that already wrote something are not affectd.
> > > >
> > > > Any objections or additions?
> > >
> > > This sounds perfectly reasonable...
> > >
> > > But I suspect some users might prefer a 404 or a customizable
> > > response of some type...
> > >
> > > At the risk of incurring the wrath of list members, perhaps yet
> > > another php.ini configuration switch could be considered?...
> > >
> > > I wouldn't hold up the 500 patch for long with this kind of
> > > discussion, but it's worth taking a few minutes to consider, I
> > > think.
> > >
> > > --
> > > Some people have a "gift" link here.
> > > Know what I want?
> > > I want you to buy a CD from some indie artist.
> > > http://cdbaby.com/browse/from/lynch
> > > Yeah, I get a buck. So?
> > >
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
Index: main/main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.640.2.23.2.35 diff -u -p -d -r1.640.2.23.2.35 main.c --- main/main.c 18 Apr 2007 09:38:56 -0000 1.640.2.23.2.35 +++ main/main.c 21 May 2007 10:39:01 -0000 @@ -834,17 +834,29 @@ static void php_error_cb(int type, const /* no break - intentionally */ case E_ERROR: case E_RECOVERABLE_ERROR: - /* case E_PARSE: the parser would return 1 (failure), we can bail out nicely */ + case E_PARSE: case E_COMPILE_ERROR: case E_USER_ERROR: EG(exit_status) = 255; if (module_initialized) { - /* restore memory limit */ - zend_set_memory_limit(PG(memory_limit)); - efree(buffer); - zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC); - zend_bailout(); - return; + if (!PG(display_errors) && + !SG(headers_sent) && + SG(sapi_headers).http_response_code == 200) { + sapi_header_line ctr = {0}; + + ctr.line = "HTTP/1.0 500 Internal Server Error"; + ctr.line_len = strlen(ctr.line); + sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); + } + /* the parser would return 1 (failure), we can bail out nicely */ + if (type != E_PARSE) { + /* restore memory limit */ + zend_set_memory_limit(PG(memory_limit)); + efree(buffer); + zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC); + zend_bailout(); + return; + } } break; }
Index: main/main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.640.2.23.2.35 diff -u -p -d -r1.640.2.23.2.35 main.c --- main/main.c 18 Apr 2007 09:38:56 -0000 1.640.2.23.2.35 +++ main/main.c 21 May 2007 10:39:01 -0000 @@ -834,17 +834,29 @@ static void php_error_cb(int type, const /* no break - intentionally */ case E_ERROR: case E_RECOVERABLE_ERROR: - /* case E_PARSE: the parser would return 1 (failure), we can bail out nicely */ + case E_PARSE: case E_COMPILE_ERROR: case E_USER_ERROR: EG(exit_status) = 255; if (module_initialized) { - /* restore memory limit */ - zend_set_memory_limit(PG(memory_limit)); - efree(buffer); - zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC); - zend_bailout(); - return; + if (!PG(display_errors) && + !SG(headers_sent) && + SG(sapi_headers).http_response_code == 200) { + sapi_header_line ctr = {0}; + + ctr.line = "HTTP/1.0 500 Internal Server Error"; + ctr.line_len = strlen(ctr.line); + sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); + } + /* the parser would return 1 (failure), we can bail out nicely */ + if (type != E_PARSE) { + /* restore memory limit */ + zend_set_memory_limit(PG(memory_limit)); + efree(buffer); + zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC); + zend_bailout(); + return; + } } break; }