ThinkPHP中的几个实用项:
在开发的时候我们往往会遇到一些错误需要去解决,一般这个时候我们比较需要借助于开发工具/调试工具,比如说浏览器中的“审核元素”,在ThinkPHP中系统为了方便我们在开发的时候对代码进行调试,也封装了一系列的调试方法:
- 跟踪信息
-两种模式
-sql调试
-性能调试
一、跟踪信息
跟踪信息就是指查询/展示系统的执行相关状况。
在ThinkPHP中跟踪信息默认是关闭的,如果需要使用,则需要开启,可以定义配置项:SHOW_PAGE_TRACE。
上述的配置项在主配置文件中是不存在的(在ThinkPHP中除了已经列出的配置项以外,还存在一些零星的配置项,这些配置项在主配置文件中不存在,但是在其他地方有使用)需要使用的话自己在配置文件中定义。
//跟踪信息配置
'SHOW_PAGE_TRACE' => true, // 默认值为false,开启则为true
在开启之后浏览页面的右下角会出现一个小方块,如图所示:
图标的左边绿色的是ThinkPHP的logo图案,右侧的黑块上显示的是当前请求执行所消耗的时间,单位是s(秒)。
当鼠标悬浮在小方块上时,鼠标将变成“小手”的形状说明可以被点击,点击后所看到的效果为:
基本:包含了请求执行的一些信息。
文件:当前请求所加载的文件。
流程:系统的执行流程。
错误:当前请求所发生的错误。
SQL:表示当前请求的错误代码。
调试:调试信息。
例如当前模式下基本信息中的数据:
在文件选项卡中可以找到系统还加载了系统函数库文件function.php文件:
二、两种模式:
在ThinkPHP系统为了方便开发,提供了以下两种模式:开发/调试模式、生产模式。
调试模式:是指在开发调试阶段所使用的模式,错误信息比较详细;
生产模式:是指项目上线的时候所使用的模式,错误信息比较模糊;
在ThinkPHP中两种模式其默认值默认是生产模式,其配置项名字叫做APP_DEBUG。定义的位置在入口文件中:
当app_debug为false的时候表示开启生产模式,为true的时候表示开启调试模式。
define('APP_DEBUG',True);// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
调试模式下的报错信息:
生产模式下的报错信息:
define('APP_DEBUG',false);// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
在跟踪信息上的体现:
在加载文件上的差异:
在生产模式下系统函数库文件function.php、系统的配置文件、应用配置文件没有被加载,但是多了一个common~runtime.php文件(没有被加载的配置文件的配置项都放到了新增文件中)。
相比调试模式,生产模式下使用缓存文件common~runtime.php,所以效率上要比调试模式高。
问:如果在生产模式下去修改主配置文件/应用级别的配置文件/系统函数库文件是否会生效?
答:不会,因为在生产模式中上述的几个文件都没有被加载,所以无法生效。如果想让它生效,可以把缓存文件common~runtime.php删除掉,或者开启调试模式去完成修改,修改完成在换回生产模式。
针对跟踪信息和两种模式的说明:
因为跟踪信息和两种模式中的调试模式都会输出系统执行的相关信息,所以在项目上线的时候应该关掉跟踪信息,开启生产模式。
三、SQL调试:
在开发的时候,难免会遇到sql的错误,这个时候需要对sql进行调试,因为ThinkPHP在执行CURD操作的时候是让开发者写方法,并不是很直观的sql:
$model -> getLastSql();
表达的含义:获取当前模型中最后一条成功执行的sql语句。
案例:使用getLastSql方法去获取最后一个sql语句。
public function test(){
//实例化模型
$model = M('dept');
//查询操作
$model -> select();
//Sql调试
$result = $model -> getLastSql();
//打印
dump($result);
}
输出结果:
补充说明:
上述的getLastSql方法在写的时候不方便,所以ThinkPHP3.2版本之后,系统增加了一个别名方法:_sql();
$model -> _sql();
四、性能调试:
G(‘开始标记’);
需要统计效率的代码段
……
G(‘结束标记’);
G(‘开始标记’,’结束标记’,数字/字符m);
针对G方法的第三个参数:如果参数是数字,则表示统计代码的执行时间,数字表示精确的小数位数,单位是秒;如果是字符m,则表示统计内存开销,单位是byt(需要服务器的支持)。
案例:使用G方法统计代码执行的时间。
public function test(){
//定义开始标记
G('start');
//测试代码
for ($i=0; $i < 100000; $i++) {
echo $i;
echo "/";
}
//定义结束标记
G('stop');
//统计开始
echo"<hr/>";
echo G('start','stop',4);
}
输出结果: