Re: [PATCH] Redirect on Error

From: Date: Thu, 21 Nov 2002 22:42:37 +0000
Subject: Re: [PATCH] Redirect on Error
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-91441@lists.php.net to get a copy of this message
What is so hard to understand in word 'FATAL'? If your script doesn't work, what use is it to make it show the cryptic 500 error?? I'm -100000 for adding anything like this, even if and even more then if it's optional. Just forget this. --Jani On Thu, 21 Nov 2002, John Coggeshall wrote: > >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); > } > > > -- <- For Sale! ->

« previous php.dev (#91441) next »