did you forget to return http 500 in the sapis? -- james
> -----Original Message----- > From: John Coggeshall [mailto:[EMAIL PROTECTED]] > Sent: Thursday, November 21, 2002 11:56 AM > To: 'PHP Developers Mailing List' > Subject: [PHP-DEV] [PATCH] Redirect on Error > > > > Okay... > > Well, even though I've yet to convince Derick and a few others... I did > see enough interest in this to create a patch. This creates two new > directives: error_redirect (bool) which turns this on/off, and > error_redirect_url (string) which is the URL to redirect to upon error. > In order for these directives to have any effect, the headers (of > course) must not have been already sent. This means that either output > buffering must be enabled, or the script never got around to outputting > anything. This patch will allow users to handle every error PHP > generates if desired (including E_PARSE, etc). > > The URL which is redirected to is passed the following parameters via a > GET statement: > > errno - The error number (i.e. E_PARSE, whatever) > Errfile - The path/file of the effected file > Errline - The line which the error occurred > Errmsg - The message provided describing the error: > > If the redirection fails (i.e. because headers had already been sent, > whatever) the standard PHP error routine is used. > > Disclaimer: This is totally meant to be RFC at this point. It works, but > Its not very friendly right now with the other error stuff (i.e. > error_prepend, etc). If I can get a +1 on this concept, I'll clean > things up before I commit. > > John > > --- php4/main/main.org.c Thu Nov 21 05:43:05 2002 > +++ php4/main/main.c Thu Nov 21 05:43:18 2002 > @@ -236,6 +236,8 @@ > STD_PHP_INI_ENTRY("docref_root", "http://www.php.net/", > PHP_INI_ALL, OnUpdateString, docref_root, > php_core_globals, core_globals) > STD_PHP_INI_ENTRY("docref_ext", "", > PHP_INI_ALL, OnUpdateString, docref_ext, > php_core_globals, core_globals) > STD_PHP_INI_BOOLEAN("html_errors", "1", > PHP_INI_ALL, OnUpdateBool, html_errors, > php_core_globals, core_globals) > + STD_PHP_INI_BOOLEAN("error_redirect", "0", > PHP_INI_SYSTEM, OnUpdateBool, error_redirect, > php_core_globals, core_globals) > > + STD_PHP_INI_ENTRY("error_redirect_url", NULL, > PHP_INI_SYSTEM, OnUpdateString, > error_redirect_url, php_core_globals, core_globals) > STD_PHP_INI_BOOLEAN("xmlrpc_errors", "0", > PHP_INI_SYSTEM, OnUpdateBool, xmlrpc_errors, > php_core_globals, core_globals) > STD_PHP_INI_ENTRY("xmlrpc_error_number", "0", > PHP_INI_ALL, OnUpdateInt, > xmlrpc_error_number, php_core_globals, core_globals) > STD_PHP_INI_ENTRY("max_input_time", "-1", > PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateInt, > max_input_time,php_core_globals, core_globals) > @@ -605,7 +607,40 @@ > if (prepend_string) { > PUTS(prepend_string); > } > - php_printf(error_format, error_type_str, buffer, > error_filename, error_lineno); > + if(PG(error_redirect) && !SG(headers_sent)) { > + > + sapi_header_line ctr = {0}; > + char *url_params; > + > + int out_url_len, t_header_len; > + > + url_params = do_alloca(ERRORURL_BUF_LEN); > + > + snprintf(url_params, > + ERRORURL_BUF_LEN-1, > + > "?errno=%d&errfile=%s&errline=%d&errmsg=%s", > + type, > + php_url_encode((char > *)error_filename, strlen(error_filename), NULL), > + error_lineno, > + php_url_encode(buffer, > strlen(buffer), NULL)); > + > + /* The +10 is to account for "Location: " > */ > + t_header_len = > strlen(PG(error_redirect_url)) + strlen(url_params) + 10; > + ctr.line = do_alloca(t_header_len); > + snprintf(ctr.line, > t_header_len+9,"Location: %s%s", PG(error_redirect_url), url_params); > + > + ctr.line_len = strlen(ctr.line); > + > + sapi_header_op(SAPI_HEADER_REPLACE, &ctr > TSRMLS_CC); > + > + free_alloca(url_params); > + free_alloca(ctr.line); > + > + } else { > + > + php_printf(error_format, error_type_str, > buffer, error_filename, error_lineno); > + } > + > if (PG(xmlrpc_errors)) { > free_alloca(error_format); > } > > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php