1

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?

5
  • 1
    Define a custom error handler: php.net/manual/en/function.set-error-handler.php Commented Aug 13, 2012 at 13:18
  • 1
    Maybe $php_errormsg will help Commented Aug 13, 2012 at 13:19
  • It says $php_errormsg returns only last error. Set_error_handler on the other hand looks like a good option, but it's not very clear how to use that func to achieve the desired effect. Commented Aug 13, 2012 at 13:22
  • php.net/manual/en/function.set-error-handler.php show several detailed examples. Try some code, and if it doesn't work as you want, ask your specific question here. Commented Aug 13, 2012 at 13:31
  • @Anonymous "it's not very clear how to use that func" As of the documentation incl. its examples it becomes very clear on how to use that function. How to get to your "desired effect" is the responsibility of the programmer – you. Commented Aug 13, 2012 at 13:32

1 Answer 1

1

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"));
Sign up to request clarification or add additional context in comments.

1 Comment

ps: trigger_error has the feature that every "presonal" error will also be in the php_error log file (if it is set)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.