Jochem Maas wrote:
> Christopher J. Bottaro wrote:
>> Adam Zey wrote:
>>
>>> Christopher J. Bottaro wrote:
>>>> Hello,
>>>> How can I trap a fatal error (like calling a non existant method,
>>>> requiring
>>>> a non existant file, etc) and go to a user defined error handler? I
>>>> tried set_error_handler(), but it seems to skip over the errors I care
>>>> about.
>>>>
>>>> Thanks for the help.
>>> It is always safer to handle errors before they happen by checking that
>>> you're in a good state before you try to do something.
>>>
>>> For example, nonexistent files can be handled by file_exists().
>>> Undefined functions can be checked with function_exists().
>>>
>>> Regards, Adam Zey.
>>
>> Well, I know that.
>>
>> Sometimes unexpected errors happen. We write hundreds of lines of code a
>> day. Typos happen, I forget some includes, I type $d->appendCild()
>> instead
>> of $d->appendChild(). It's all a part of the development process.
>>
>> Our application makes extensive use of AJAX and JSON. Sometimes we make
>> an AJAX request and expect a JSON object in return, but instead a fatal
>> error happens (DOMDocument::appendChid() does not exist), well now we get
>> a JSON error because the response headers were messed up by the fatal
>> error.
>>
>> That JSON error is useless. We would rather see the real error as PHP
>> would have reported it on a simple webpage or command line.
>>
>> Basically, we just want to trap all errors and reraise them as exceptions
>> so that our app's default exception handler can report them.
>
> for fatal errors this not possible.
>
> write test routines to check the output of requests that are usually made
> by AJAX code... and made use a function like this to cover all your bases:
>
> function PHPErrorReturned(response)
> {
> // this is a bit crude and could possibly break if we are recieving
> // [content] HTML as part of the returned data.
> if ((response.indexOf('<b>Notice</b>: ') ||
> response.indexOf('<b>Warning</b>: ') ||
> response.indexOf('<b>Fatal Error</b>: ')) &&
> (response.indexOf('{') != 0))
> {
> alert("Er was een fout opgetreden op de
> server\n"+response.stripTags()); return true;
> }
>
> return false;
> }
>
> String.prototype.stripTags = function (validTags)
> {
> var newstr = this.toString();
> var regExp1 = /<\/?(\w+)(.*?)>/ig;
>
> if (validTags && validTags.prototype == Array) {
> var regExp2 = new RegExp('/^('+validTags.join('|')+')$/i'); //
> em|strong|u|p
> }
>
> while(mt = regExp1.exec(newstr)) {
> oldstr = mt[0]; tag = mt[1]; pars = mt[2];
> repl = '';
>
> if(regExp2 && tag.match(regExp2)) {
> repl = oldstr.replace(pars,'');
> }
>
> newstr = newstr.replace(oldstr, repl);
> }
> return newstr;
> }
>
>
>
>
>>
>> Thanks.
Cool, that sounds promising, thanks for that idea (and everyone else who
replied).
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php