>First of all i like the way you did it.
>But why do you cut the errors by using snprintf with maximum 
>length set to ERRORURL_BUF_LEN. Instead you can simply use 
>spprintf and we would get the whole message. I guess you did 
>it because you created a GET solution?

Well, I guess it could be implemented with spprintf -- However
For the use I really didn't see the need to use it. The only
Real "variables" in the string length are the filename/path and
The error-message.. These are of pretty finite length so I figured
A few kilobytes statically wouldn't hurt anyone and makes it
That much more efficient.


>marcus
>
>At 12:56 21.11.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);
>>                         }
>>
>>
>>--
>>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

Reply via email to