ThinkPHP5捕獲致命錯誤流程

查詢ThinkPHP5是怎麼捕獲致命錯誤。

首先全局搜索"register_shutdown_function",ThinkPHP5是通過register_shutdown_function方法註冊程序執行結束時調用函數,找到項目路徑下./thinkphp/library/think/Error.php文件使用了註冊方法,找到的代碼如下:

/**
 * 註冊異常處理
 * @access public
 * @return void
 */
public static function register()
{
    error_reporting(E_ALL);
    set_error_handler([__CLASS__, 'appError']);
    set_exception_handler([__CLASS__, 'appException']);
    register_shutdown_function([__CLASS__, 'appShutdown']);
}

在該文件下找到方法appShutdown,找到的代碼如下:

/**
 * 異常中止處理
 * @access public
 * @return void
 */
public static function appShutdown()
{
    // 將錯誤信息託管至 think\ErrorException
    if (!is_null($error = error_get_last()) && self::isFatal($error['type'])) {
        self::appException(new ErrorException(
            $error['type'], $error['message'], $error['file'], $error['line']
        ));
    }

    // 寫入日誌
    Log::save();
}

ThinkPHP5是通過register_shutdown_function方法註冊結束時的函數回到,然後通過error_get_last方法獲取錯誤信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章