register_shutdown_function捕获致命错误并更新json_encode

时间:2015-06-22 13:56:40

标签: php json fatal-error

我可以通过register_shutdown_function('shutdown')

发现致命错误
function shutdown(){
    $error = error_get_last();
    $result['message'] = $error['message'];
}

我有echo json_encode($result);

不幸的是,这个echo json_encode没有显示任何内容,因为json没有更新致命错误的消息。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

为什么要将一个数组移动到另一个数组然后回显第二个数组。

为什么不这样做呢

function shutdown(){
    $error = error_get_last();
    echo json_encode($error);
}

甚至是这个

function shutdown(){
    echo json_encode(error_get_last());
}

除了使用不必要的数组外,这将为您提供get_last_error()

提供的所有信息

当然可能是error_get_last()信息在关机过程的后期阶段才可用。如果是这种情况,那么您可以将额外的参数传递给关闭功能,这可能是您需要做的。

register_shutdown_function('shutdown', get_last_error());

function shutdown($last_error){
    echo json_encode($last_error);
}

<强> EDITED

首先我添加了error_reporting(~E_ERROR); // don't report fatal errors

第一个对我有用的意思是

error_reporting(~E_ERROR); // don't report fatal 

register_shutdown_function('shutdown');

function shutdown(){
    $error = error_get_last();

    if ($error['type'] === 1){ 
         echo json_encode($error);
}

根据我的需要,我写道:

function shutdown(){
    $error = error_get_last();

    if ($error['type'] === 1){ // 1 means fatal error
         $res['message'] = $error['message'];

         $res['success'] = true;

         header('Content-Type: application/json');

         echo json_encode($res);
    }
}