本文整理匯總了PHP中think\Debug類的典型用法代碼示例。如果您正苦於以下問題:PHP Debug類的具體用法?PHP Debug怎麽用?PHP Debug使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Debug類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: output
/**
* 調試輸出接口
* @access public
* @param Response $response Response對象
* @param array $log 日誌信息
* @return bool
*/
public function output(Response $response, array $log = [])
{
$request = Request::instance();
$contentType = $response->getHeader('Content-Type');
$accept = $request->header('accept');
if (strpos($accept, 'application/json') === 0 || $request->isAjax()) {
return false;
} elseif (!empty($contentType) && strpos($contentType, 'html') === false) {
return false;
}
// 獲取基本信息
$runtime = number_format(microtime(true), 8, '.', '') - THINK_START_TIME;
$reqs = number_format(1 / $runtime, 2);
$mem = number_format((memory_get_usage() - THINK_START_MEM) / 1024, 2);
// 頁麵Trace信息
if (isset($_SERVER['HTTP_HOST'])) {
$uri = $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
} else {
$uri = 'cmd:' . implode(' ', $_SERVER['argv']);
}
$base = ['請求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $uri, '運行時間' => number_format($runtime, 6) . 's [ 吞吐率:' . $reqs . 'req/s ] 內存消耗:' . $mem . 'kb 文件加載:' . count(get_included_files()), '查詢信息' => Db::$queryTimes . ' queries ' . Db::$executeTimes . ' writes ', '緩存信息' => Cache::$readTimes . ' reads,' . Cache::$writeTimes . ' writes', '配置加載' => count(Config::get())];
if (session_id()) {
$base['會話信息'] = 'SESSION_ID=' . session_id();
}
$info = Debug::getFile(true);
// 頁麵Trace信息
$trace = [];
foreach ($this->config['trace_tabs'] as $name => $title) {
$name = strtolower($name);
switch ($name) {
case 'base':
// 基本信息
$trace[$title] = $base;
break;
case 'file':
// 文件信息
$trace[$title] = $info;
break;
default:
// 調試信息
if (strpos($name, '|')) {
// 多組信息
$names = explode('|', $name);
$result = [];
foreach ($names as $name) {
$result = array_merge($result, isset($log[$name]) ? $log[$name] : []);
}
$trace[$title] = $result;
} else {
$trace[$title] = isset($log[$name]) ? $log[$name] : '';
}
}
}
// 調用Trace頁麵模板
ob_start();
include $this->config['trace_file'];
return ob_get_clean();
}
示例2: getId
public static function getId()
{
$user = static::get();
if (isset($user['id'])) {
return $user['id'];
} else {
Debug::output(new Exception("不存在請求的user_id"));
}
}
示例3: save
/**
* 日誌寫入接口
* @access public
* @param array $log 日誌信息
* @return bool
*/
public function save(array $log = [])
{
if (IS_AJAX || IS_CLI || IS_API || 'html' != Config::get('default_return_type')) {
// ajax cli api方式下不輸出
return false;
}
// 獲取基本信息
$runtime = microtime(true) - START_TIME;
$reqs = number_format(1 / $runtime, 2);
$runtime = number_format($runtime, 6);
$mem = number_format((memory_get_usage() - START_MEM) / 1024, 2);
// 頁麵Trace信息
$base = ['請求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], '運行時間' => "{$runtime}s [ 吞吐率:{$reqs}req/s ] 內存消耗:{$mem}kb 文件加載:" . count(get_included_files()), '查詢信息' => \think\Db::$queryTimes . ' queries ' . \think\Db::$executeTimes . ' writes ', '緩存信息' => \think\Cache::$readTimes . ' reads,' . \think\Cache::$writeTimes . ' writes', '配置加載' => count(Config::get())];
if (session_id()) {
$base['會話信息'] = 'SESSION_ID=' . session_id();
}
$info = Debug::getFile(true);
// 獲取調試日誌
$debug = [];
foreach ($log as $line) {
$debug[$line['type']][] = $line['msg'];
}
// 頁麵Trace信息
$trace = [];
foreach ($this->config['trace_tabs'] as $name => $title) {
$name = strtolower($name);
switch ($name) {
case 'base':
// 基本信息
$trace[$title] = $base;
break;
case 'file':
// 文件信息
$trace[$title] = $info;
break;
default:
// 調試信息
if (strpos($name, '|')) {
// 多組信息
$names = explode('|', $name);
$result = [];
foreach ($names as $name) {
$result = array_merge($result, isset($debug[$name]) ? $debug[$name] : []);
}
$trace[$title] = $result;
} else {
$trace[$title] = isset($debug[$name]) ? $debug[$name] : '';
}
}
}
// 調用Trace頁麵模板
ob_start();
include $this->config['trace_file'];
echo ob_get_clean();
return true;
}
示例4: display
/**
* 將html字符串輸出返回給遊覽器
* 內部調用fetch和render方法,而非直接使用模板引擎的方法
*
*/
public function display($templateFile = '', $charset = '', $contentType = '', $content = '', $prefix = '')
{
// 標記統計
Debug::mark('viewStartTime');
// 視圖開始標簽
Tag::listen('view_begin', $templateFile);
// 解析並獲取模板內容
$content = $this->fetch($templateFile, $content, $prefix);
// 輸出模板內容
$this->render($content, $charset, $contentType);
// 視圖結束標簽
Tag::listen('view_end');
}
示例5: run
public function run(&$content)
{
if (C('HTML_CACHE_ON') && defined('HTML_FILE_NAME')) {
//靜態文件寫入
// 如果開啟HTML功能 檢查並重寫HTML文件
// 沒有模版的操作不生成靜態文件
if (!is_dir(dirname(HTML_FILE_NAME))) {
mkdir(dirname(HTML_FILE_NAME), 0755, true);
}
if (false === file_put_contents(HTML_FILE_NAME, $content)) {
Debug::throw_exception(L('_CACHE_WRITE_ERROR_') . ':' . HTML_FILE_NAME);
}
}
}
示例6: showTrace
/**
* 顯示頁麵Trace信息
* @access private
*/
private function showTrace()
{
// 係統默認顯示信息
$files = get_included_files();
$info = [];
foreach ($files as $key => $file) {
$info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )';
}
$trace = [];
Debug::remark('START', NOW_TIME);
$base = ['請求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['PHP_SELF'], '運行時間' => Debug::getUseTime('START', 'END', 6) . 's', '內存開銷' => MEMORY_LIMIT_ON ? G('START', 'END', 'm') . 'b' : '不支持', '查詢信息' => N('db_query') . ' queries ' . N('db_write') . ' writes ', '文件加載' => count($files), '緩存信息' => N('cache_read') . ' gets ' . N('cache_write') . ' writes ', '配置加載' => count(Config::get())];
// 讀取項目定義的Trace文件
$traceFile = MODULE_PATH . 'trace.php';
if (is_file($traceFile)) {
$base = array_merge($base, include $traceFile);
}
$debug = Log::getLog();
$tabs = Config::get('trace_page_tabs');
foreach ($tabs as $name => $title) {
switch (strtoupper($name)) {
case 'BASE':
// 基本信息
$trace[$title] = $base;
break;
case 'FILE':
// 文件信息
$trace[$title] = $info;
break;
default:
// 調試信息
$name = strtoupper($name);
if (strpos($name, '|')) {
// 多組信息
$array = explode('|', $name);
$result = [];
foreach ($array as $name) {
$result += isset($debug[$name]) ? $debug[$name] : [];
}
$trace[$title] = $result;
} else {
$trace[$title] = isset($debug[$name]) ? $debug[$name] : '';
}
}
}
unset($files, $info, $base, $debug);
// 調用Trace頁麵模板
ob_start();
include Config::has('tmpl_trace_file') ? Config::get('tmpl_trace_file') : THINK_PATH . 'tpl/page_trace.tpl';
return ob_get_clean();
}
示例7: save
/**
* 日誌寫入接口
* @access public
* @param array $log 日誌信息
* @return void
*/
public function save($log = [])
{
// 獲取基本信息
$current_uri = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$runtime = number_format(microtime(true) - START_TIME, 6);
$reqs = number_format(1 / $runtime, 2);
// 頁麵Trace信息
$base = ['請求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $current_uri, '運行時間' => "{$runtime}s [ 吞吐率:{$reqs}req/s ]", '內存消耗' => number_format((memory_get_usage() - START_MEM) / 1024, 2) . 'kb', '查詢信息' => \think\Db::$queryTimes . ' queries ' . \think\Db::$executeTimes . ' writes ', '緩存信息' => \think\Cache::$readTimes . ' reads,' . \think\Cache::$writeTimes . ' writes', '文件加載' => count(get_included_files()), '配置加載' => count(\think\Config::get()), '會話信息' => 'SESSION_ID=' . session_id()];
$info = \think\Debug::getFile(true);
// 獲取調試日誌
$debug = [];
foreach ($log as $line) {
$debug[$line['type']][] = $line['msg'];
}
// 頁麵Trace信息
$trace = [];
foreach ($this->tabs as $name => $title) {
$name = strtolower($name);
switch ($name) {
case 'base':
// 基本信息
$trace[$title] = $base;
break;
case 'file':
// 文件信息
$trace[$title] = $info;
break;
default:
// 調試信息
if (strpos($name, '|')) {
// 多組信息
$names = explode('|', $name);
$result = [];
foreach ($names as $name) {
$result = array_merge($result, isset($debug[$name]) ? $debug[$name] : []);
}
$trace[$title] = $result;
} else {
$trace[$title] = isset($debug[$name]) ? $debug[$name] : '';
}
}
}
// 調用Trace頁麵模板
ob_start();
include $this->config['trace_file'];
echo ob_get_clean();
}
示例8: parseTemplateFile
/**
* 自動定位模板文件
* @access private
* @param string $templateFile 文件名
* @return string
*/
private function parseTemplateFile($templateFile)
{
if ('' == $templateFile) {
// 如果模板文件名為空 按照默認規則定位
$templateFile = C('TEMPLATE_NAME');
} elseif (false === strpos($templateFile, C('TMPL_TEMPLATE_SUFFIX'))) {
// 解析規則為 模板主題:模塊:操作 不支持 跨項目和跨分組調用
$path = explode(':', $templateFile);
$action = array_pop($path);
$module = !empty($path) ? array_pop($path) : CONTROLLER_NAME;
if (!empty($path)) {
// 設置模板主題
$path = dirname(THEME_PATH) . '/' . array_pop($path) . '/';
} else {
$path = THEME_PATH;
}
$templateFile = $path . $module . C('TMPL_FILE_DEPR') . $action . C('TMPL_TEMPLATE_SUFFIX');
}
if (!File::exists_case($templateFile)) {
Debug::throw_exception(L('_TEMPLATE_NOT_EXIST_') . '[' . $templateFile . ']');
}
return $templateFile;
}
示例9: set
/**
* 寫入緩存
* @access public
* @param string $name 緩存變量名
* @param mixed $value 存儲數據
* @param int $expire 有效時間 0為永久
* @return boolen
*/
public function set($name, $value, $expire = null)
{
Debug::record('cache_write', 1);
if (is_null($expire)) {
$expire = $this->options['expire'];
}
$filename = $this->filename($name);
$data = serialize($value);
if (C('DATA_CACHE_COMPRESS') && function_exists('gzcompress')) {
//數據壓縮
$data = gzcompress($data, 3);
}
if (C('DATA_CACHE_CHECK')) {
//開啟數據校驗
$check = md5($data);
} else {
$check = '';
}
$data = "<?php\n//" . sprintf('%012d', $expire) . $check . $data . "\n?>";
$result = file_put_contents($filename, $data);
if ($result) {
if ($this->options['length'] > 0) {
// 記錄緩存隊列
$this->queue($name);
}
clearstatcache();
return true;
} else {
return false;
}
}
示例10: send
/**
* 發送數據到客戶端
* @access public
* @return mixed
* @throws \InvalidArgumentException
*/
public function send()
{
// 處理輸出數據
$data = $this->getContent();
// Trace調試注入
if (Env::get('app_trace', Config::get('app_trace'))) {
Debug::inject($this, $data);
}
if (!headers_sent() && !empty($this->header)) {
// 發送狀態碼
http_response_code($this->code);
// 發送頭部信息
foreach ($this->header as $name => $val) {
header($name . ':' . $val);
}
}
echo $data;
if (function_exists('fastcgi_finish_request')) {
// 提高頁麵響應
fastcgi_finish_request();
}
}
示例11: debug
/**
* 數據庫調試 記錄當前SQL
* @access protected
* @param boolean $start 調試開始標記 true 開始 false 結束
*/
protected function debug($start)
{
if (!empty($this->config['debug'])) {
// 開啟數據庫調試模式
if ($start) {
Debug::remark('queryStartTime', 'time');
} else {
$this->modelSql[$this->model] = $this->queryStr;
// 記錄操作結束時間
Debug::remark('queryEndTime', 'time');
$log = $this->queryStr . ' [ RunTime:' . Debug::getRangeTime('queryStartTime', 'queryEndTime') . 's ]';
// SQL性能分析
if (0 === stripos(trim($this->queryStr), 'select')) {
$pdo = $this->linkID->query("EXPLAIN " . $this->queryStr);
$result = $pdo->fetch(PDO::FETCH_ASSOC);
if (strpos($result['extra'], 'filesort') || strpos($result['extra'], 'temporary')) {
Log::record('SQL:' . $this->queryStr . '[' . $result['extra'] . ']', 'warn');
}
$log .= '[ EXPLAIN : ' . var_export($result, true) . ' ]';
}
Log::record('[ SQL ] ' . $log, 'sql');
}
}
}
示例12: load_runtime_file
/**
* 加載運行時所需要的文件
* 檢查調試模式創建目錄
*
* @return void
*/
public static function load_runtime_file()
{
try {
// 載入臨時的Helper文件,將重構
include CORE_PATH . 'Library/Helper' . EXT;
// 調試模式下檢查路徑和文件
if (APP_DEBUG) {
// 創建項目目錄結構
if (!is_dir(LIB_PATH)) {
throw new Exception("不存在項目目錄結構");
}
// 檢查緩存目錄
if (!is_dir(CACHE_PATH)) {
// 如果不存在Runtime則創建
if (!is_dir(RUNTIME_PATH)) {
mkdir(RUNTIME_PATH);
} else {
if (!is_writeable(RUNTIME_PATH)) {
throw new Exception(RUNTIME_PATH . "is no writeable");
}
}
// 檢查並創建Runtime下的緩存目錄
foreach (array(CACHE_PATH, LOG_PATH, TEMP_PATH, DATA_PATH) as $key => $value) {
if (!is_dir($value)) {
mkdir($value);
}
}
}
}
// 記錄文件加載時間
Debug::mark('loadTime');
// 啟動
App::run();
} catch (Exception $error) {
exit($error->getMessage());
}
}
示例13: _404
/**
* 404處理
* 調試模式會拋異常
* 部署模式下麵傳入url參數可以指定跳轉頁麵,否則發送404信息
* @param string $msg 提示信息
* @param string $url 跳轉URL地址
* @return void
*/
public static function _404($message = '', $url)
{
if (APP_DEBUG) {
Debug::output(new Exception($message));
} else {
static::send_http_status(404);
exit;
}
}
示例14: debug
/**
* 數據庫調試 記錄當前SQL
* @access protected
* @param boolean $start 調試開始標記 true 開始 false 結束
*/
protected function debug($start)
{
if (!empty($this->config['debug'])) {
// 開啟數據庫調試模式
if ($start) {
Debug::remark('queryStartTime', 'time');
} else {
$this->modelSql[$this->model] = $this->queryStr;
// 記錄操作結束時間
Debug::remark('queryEndTime', 'time');
Log::record($this->queryStr . ' [ RunTime:' . Debug::getRangeTime('queryStartTime', 'queryEndTime') . 's ]', 'sql');
}
}
}
示例15: run
/**
* 執行應用程序
* @access public
* @param Request $request Request對象
* @return Response
* @throws Exception
*/
public static function run(Request $request = null)
{
is_null($request) && ($request = Request::instance());
if ('ico' == $request->ext()) {
throw new HttpException(404, 'ico file not exists');
}
$config = self::initCommon();
try {
// 開啟多語言機製
if ($config['lang_switch_on']) {
// 獲取當前語言
$request->langset(Lang::detect());
// 加載係統語言包
Lang::load(THINK_PATH . 'lang' . DS . $request->langset() . EXT);
if (!$config['app_multi_module']) {
Lang::load(APP_PATH . 'lang' . DS . $request->langset() . EXT);
}
}
// 獲取應用調度信息
$dispatch = self::$dispatch;
if (empty($dispatch)) {
// 進行URL路由檢測
$dispatch = self::routeCheck($request, $config);
}
// 記錄當前調度信息
$request->dispatch($dispatch);
// 記錄路由信息
self::$debug && Log::record('[ ROUTE ] ' . var_export($dispatch, true), 'info');
// 監聽app_begin
Hook::listen('app_begin', $dispatch);
switch ($dispatch['type']) {
case 'redirect':
// 執行重定向跳轉
$data = Response::create($dispatch['url'], 'redirect')->code($dispatch['status']);
break;
case 'module':
// 模塊/控製器/操作
$data = self::module($dispatch['module'], $config, isset($dispatch['convert']) ? $dispatch['convert'] : null);
break;
case 'controller':
// 執行控製器操作
$data = Loader::action($dispatch['controller'], $dispatch['params']);
break;
case 'method':
// 執行回調方法
$data = self::invokeMethod($dispatch['method'], $dispatch['params']);
break;
case 'function':
// 執行閉包
$data = self::invokeFunction($dispatch['function'], $dispatch['params']);
break;
case 'response':
$data = $dispatch['response'];
break;
default:
throw new \InvalidArgumentException('dispatch type not support');
}
} catch (HttpResponseException $exception) {
$data = $exception->getResponse();
}
// 清空類的實例化
Loader::clearInstance();
// 輸出數據到客戶端
if ($data instanceof Response) {
$response = $data;
} elseif (!is_null($data)) {
// 默認自動識別響應輸出類型
$isAjax = $request->isAjax();
$type = $isAjax ? Config::get('default_ajax_return') : Config::get('default_return_type');
$response = Response::create($data, $type);
} else {
$response = Response::create();
}
// 監聽app_end
Hook::listen('app_end', $response);
// Trace調試注入
if (Config::get('app_trace')) {
Debug::inject($response);
}
return $response;
}