Anonymous
Anonymous

Reputation: 4630

Php: how to capture error reports?

I am working on a php script that that is invoked by ajax request, and is supposed to echo some response code to be parsed.

For example:

die('#1:200|Success|'.$data);

Or another one:

die('#0:100|Access Denied|');

Now, I want also to include any errors or warnings that might have occurred during the execution of the script - BUT appended at the end of the message.

So, what would be an elegant way of capturing all the errors into some variable?

EDIT

Well It isn't easy to understand how it meant to be used, the manual isn't clear on many things.

But ok, I will try to make an example of how I understand it, then please point it out if I'm getting it wrong :-)

//So guess first I off error reporting that would naturally occur.
error_reporting(0);

//Then I will define array to stuff the errors in.
$errors=array();

//Then I make my handler function.
function handler($errno,$errstr){
    global $errors;
    $errors[]=$errno.': '.$errstr;    //Stuff it into array.
}

//Then I define handler.
set_error_handler('handler',E_ALL);

Is this correct usage?

It also says:

The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

And also question, why it wouldn't capture strict errors?

Upvotes: 1

Views: 204

Answers (1)

user669677
user669677

Reputation:

I'm always require this to capture errors while ajaxing:

header('content-type: application/json; charset=utf-8');
error_reporting(E_ALL);ob_start();

function error($msg,$do = false)
{
    //personal error message
    if(!isset($_SESSION))session_start();       
    trigger_error($msg."\n".(isset($_SESSION)?"[".$_SESSION['id']."|".$_SESSION['name']."]":"")."-----------");

    ob_clean(); 
    die(json_encode(array($msg,$do)));
}
function ob_error($msg = "Error!",$do = "ob_error")
{
    if($s = ob_get_clean())
    error("$msg\nDetails:\n$s",$do);
}

usage:

//require the php above

//do something

//call error("acces denied") if there is an fatal error

//do anything else

//call ob_error() at the end: if there was anything outputted like warning/notice it will shown

//call die(json_encode(array(1, ...anything you need*...))); - this will run only if there was nothing displayed

client site usage:

$.post('/_ajax/... .php',{
            'param1':...
            },function(a){
                if(a[0]=="1") //OK
                {                   
                    //* do something with a[n]                  
                }else{ //onError
                    alert(a[0]); 
                    //what to do client site after the error
                    if(a[1]=="refresh") 
                        location.href=location.href;
                }
            },"json").error(function() {alert("postError"));

Upvotes: 1

Related Questions