?下面thinkphp框架教程栏目将给大家介绍关于如何开启THINKPHP 调试模式及异常处理,希望对需要的朋友有所帮助!
下面thinkphp框架教程栏目将给大家介绍关于如何开启THINKPHP 调试模式及异常处理,希望对需要的朋友有所帮助!调试模式开启调试模式很简单,只需要在入口文件中增加一行常量定义代码: <?php
// 开启调试模式
define('APP_DEBUG', true);
// 定义应用目录
define('APP_PATH', './Application/');
// 加载框架入口文件
require './ThinkPHP/ThinkPHP.php';测试时,开启DEBUG调试模式, 开发模式下,自动生成缓存文件,测试时自动调用缓存的文件,会出错 在完成开发阶段部署到生产环境后,只需要关闭调试模式或者删除调试模式定义代码即可切换到部署模式。 <?php
// 关闭调试模式
define('APP_DEBUG', false);
// 定义应用目录
define('APP_PATH', './Application/');
// 加载框架入口文件
require './ThinkPHP/ThinkPHP.php';调试模式的优势在于:
一旦关闭调试模式,发生错误后不会提示具体的错误信息,如果你仍然希望看到具体的错误信息,那么可以如下设置: 'SHOW_ERROR_MSG' => true, // 显示错误信息 异常处理调试模式下面一旦系统发生严重错误会自动抛出异常,也可以用ThinkPHP内置的E方法手动抛出异常。 E('新增失败');也可以支持异常代码(默认为0),例如: E('信息录入错误',25);通过设置TMPL_EXCEPTION_FILE配置参数来修改系统默认的异常模板文件, 例如: 'TMPL_EXCEPTION_FILE' => APP_PATH.'/Public/exception.tpl' 异常模板中可以使用的异常变量有: $e['file']异常文件名 $e['line'] 异常发生的文件行数 $e['message'] 异常信息 $e['trace'] 异常的详细Trace信息 抛出异常后通常会显示具体的错误信息,如果不想让用户看到具体的错误信息,可以设置关闭错误信息的显示并设置统一的错误提示信息,例如: 'SHOW_ERROR_MSG' => false, 'ERROR_MESSAGE' => '发生错误 配置ERROR_PAGE参数,把所有异常和错误都指向一个统一页面,从而避免让用户看到异常信息,通常在部署模式下面使用。ERROR_PAGE参数必须是一个完整的URL地址,例如: 'ERROR_PAGE' =>'/Public/error.html' 如果不在当前域名,还可以指定域名: 'ERROR_PAGE' =>'http://www.myDomain.com/Public/error.html'
日志记录默认情况下只是在调试模式记录日志,要在部署模式开启日志记录,必须在配置中开启 'LOG_RECORD' => true, // 开启日志记录 'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误 日志级别ThinkPHP对系统的日志按照级别来分类,包括:
记录方式日志的记录方式默认是文件方式,可以通过驱动的方式来扩展支持更多的记录方式。 记录方式由LOG_TYPE参数配置,例如: 'LOG_TYPE' => 'File', // 日志记录类型 默认为文件方式
手动记录一般情况下,系统的日志记录是自动的,无需手动记录,但是某些时候也需要手动记录日志信息,Log类提供了3个方法用于记录日志。
由于系统在请求结束后会自动调用Log::save方法,所以通常,你只需要调用Log::record记录日志信息即可。 默认记录的日志级别是ERR,也可以指定日志级别: Think\Log::record('测试日志信息,这是警告级别','WARN');record方法只会记录当前配置允许记录的日志级别的信息,如果应用配置为: 'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误 那么上面的record方法记录的日志信息会被直接过滤,或者你可以强制记录: Think\Log::record('测试日志信息,这是警告级别','WARN',true);采用record方法记录的日志信息不是实时保存的,如果需要实时记录的话,可以采用write方法,例如: Think\Log::write('测试日志信息,这是警告级别,并且实时写入','WARN');write方法写入日志的时候 不受配置的允许日志级别影响,可以实时写入任意级别的日志信息。 页面trace
要开启页面Trace功能,需要在项目配置文件中设置: // 显示页面Trace信息 'SHOW_PAGE_TRACE' =>true, 该参数默认为关闭,开启后并且你的页面有模板输出的话,页面右下角会显示ThinkPHP的LOGO: 我们看到的LOGO后面的数字就是当前页面的执行时间(单位是秒) 点击该图标后,会展开详细的页面Trace信息,如图: 页面Trace框架有6个选项卡,分别是基本、文件、流程、错误、SQL和调试,点击不同的选项卡会切换到不同的Trace信息窗口。
页面Trace的选项卡是可以定制和扩展的,默认的配置为: 'TRACE_PAGE_TABS'=>array(
'base'=>'基本',
'file'=>'文件',
'think'=>'流程',
'error'=>'错误',
'sql'=>'SQL',
'debug'=>'调试'
)把刚才的用户信息调试输出到用户选项卡,trace方法的用法如下: trace($user,'用户信息','user'); 保存这些trace信息,我们可以配置 'PAGE_TRACE_SAVE'=>true 如果不希望保存所有的选项卡的信息,可以设置需要保存的选项卡,例如: 'PAGE_TRACE_SAVE' => array('base','file','sql');Trace方法页面Trace只能用于有页面输出的情况,但是trace方法可以用在任何情况,而且trace方法可以用于AJAX等操作。 Trace方法的格式: trace('变量','标签','级别','是否记录日志')例如: $info = '测试信息'; trace($info,'提示'); 如果希望把变量调试输出到页面Trace的某个选项卡里面,可以使用: trace($info,'提示','user'); 如果是输出到ERR选项卡,并且开启 trace($info,'错误','ERR'); 会抛出异常。 有三种情况下,trace方法会记录日志:
断点调试凭借强大的页面Trace信息功能支持,ThinkPHP可以支持断点调试功能。 我们只需要在不同的位置对某个变量进行trace输出即可,例如: $blog = D("Blog");
$vo = $blog->create();
trace($vo,'create vo');
$vo = $blog->find();
trace($vo,'find vo');变量调试输出某个变量是开发过程中经常会用到的调试方法 用法: dump($var, $echo=true, $label=null, $strict=true) 相关参数的使用如下:
如果echo参数为false 则返回要输出的字符串 使用示例: $Blog = D("Blog");
$blog = $Blog->find(3);
dump($blog);性能调试G方法可以很方便的获取某个区间的运行时间和内存占用情况。 例如: G('begin');
// ...其他代码段
G('end');
// ...也许这里还有其他代码
// 进行统计区间
echo G('begin','end').'s';G('begin','end') 表示统计begin位置到end位置的执行时间(单位是秒),begin必须是一个已经标记过的位置,如果这个时候end位置还没被标记过,则会自动把当前位置标记为end标签,输出的结果类似于: 默认的统计精度是小数点后4位,如果觉得这个统计精度不够,还可以设置例如: G('begin','end',6).'s';可能的输出会变成: 如果你的环境支持内存占用统计的话,还可以使用G方法进行区间内存开销统计(单位为kb),例如: echo G('begin','end','m').'kb';第三个参数使用m表示进行内存开销统计,输出的结果可能是: 错误调试如果需要我们可以使用E方法输出错误信息并中断执行,例如: //输出错误信息,并中止执行 E($msg); 模型调试调试执行的SQL语句在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的SQL语句,我们可以用 $User = M("User"); // 实例化User对象
$User->find(1);
echo $User->getLastSql();
// 3.2版本中可以使用简化的方法
echo $User->_sql();每个模型都使用独立的最后SQL记录,互不干扰,但是可以用空模型的getLastSql方法获取全局的最后SQL记录 调试数据库错误信息在模型操作中,还可以获取数据库的错误信息,例如: $User = M("User"); // 实例化User对象
$result = $User->find(1);
if(false === $result){
echo $User->getDbError();
}
以上就是聊聊THINKPHP调试模式及异常处理的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
