本文整理汇总了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;
}