【一】代码调试

(1)跟踪信息

①简介:用于展示系统执行的相关状况,类似于快递的物流信息。ThinkPHP中默认关闭。如需使用,则通过配置项SHOW_PAGE_TRACE(显示页面跟踪)来配置。

②位置:查找后发现上述配置项在主配置文件(系统配置项)Think/Conf/convention.php中不存在,因为刚部署完代码时应用配置文件(Application/Common/Conf/config.php)和

分组配置文件(Appliction/Home/Conf/config.php)中为空,所以也不存在页面跟踪配置项。

③注意:在ThinkPHP里,除了主配置文件里已经列出的配置项,还有其他零星的配置项,在其他地方用到。需要使用的话可以在配置文件里定义。

④定义:如定义到分组配置下,则只能用于该分组,所以将其定义到应用级别的配置文件Application/Common/Conf/config.php里(数据库配置信息所在文件)。

  1. //显示跟踪信息
    'SHOW_PAGE_TRACE' => true,//默认为false关闭

⑤开启后,在页面右下角会出现一个小图标。包含ThinkPHP的logo和当前请求执行时间(单位:s)。点击后会开启类似浏览器控制器调试的窗口,包含当前页面的一些调试信息。分为基本(包含请求执行的一些信息)、文件(当前请求一共加载的页面)、流程(系统执行流程)、错误(发生的错误信息)、SQL(当前请求执行的sql代码)、调试(调试信息)

上述的基本(包含请求执行的一些信息)中主要看文件加载数和配置加载数;同时在文件选项下还加载了函数库文件和3大配置文件

(2)两种模式

①分类及区别:

在ThinkPHP中为了方便开发,提供了两种模式:开发/模式模式,生产模式

开发/调试模式:开发调试阶段所使用的模式(错误信息比较详细,方便调试);

生产模式:上线时所使用的模式(错误信息比较模糊);

②详解:

ThinkPHP里默认是生产模式,其配置项名字为APP_DEBUG,在入口文件里有配置

  1. // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
  2. define('APP_DEBUG',True);

所以当APP_DEBUG为false时为生产模式,为true时是调试/开发模式。

③差异:

1. 报错信息差异

开发模式下的报错信息:会将错误的类型和具体报错文件输出,便于开发人员调试;

生产模式下的报错信息:只会提示页面错误,请稍后再试~,不会输出错误类型和文件位置

2. 跟踪信息的差异

调试模式下的文件加载数较多,且调试模式下加载文件和生产模式相比,多了系统函数库文件

生产模式下系统函数库文件、系统配置文件、应用配置文件均没有被加载,但多了个common~runtime.php文件。需要加载的系统配置项和应用配置项此时都压缩到了common~runtime.php文件下。

相比调试模式,生产模式下使用了缓存文件common~runtime.php,所以其效率上比调试模式高(原因:差了12个文件,将需要的配置压缩到了缓存文件里去了)

④经典面试:在生产模式下修改主配置文件(系统配置文件)/应用配置文件/函数库文件,是否会生效?

答:不会~~~,因为在生产模式下这些文件根本没有被加载,所以修改无效。如果想让其生效,有两种方法。

1. 将缓存文件common~runtime.php删除掉,删除掉之后,下次刷新页面会重新生成,相当于重新加载上述三个文件;

2. 将生产模式调回开发模式

⑤注意:因为跟踪信息和调试模式都会输出系统执行的相关信息,所以项目上线时应该关掉跟踪信息并开启生产模式

(3)sql调试

①简介:

因为ThinkPHP在执行CURD操作时是让开发者写方法,并不是直观的sql:此时想要调试则要利用sql调试。而sql调试方法在ThinkPHP中封装了调试方法getLastSql,由于该方法

是父类模型封装的,所以执行时需要用模型去调用方法。

②语法:$model -> getLastSql()--小驼峰命名法

表示获取当前模型里成功执行的最后一条sql语句

③案例:使用getLastSql方法去获取最后一条成功执行的sql语句

  1. public function sqlDebug(){
  2. //实例化模型
  3. $model = M('dept');
  4. //sql语句查询
  5. $data = $model->select();//查询所有记录
  6. //sql调试
  7. $result = $model->getLastSql();
  8. dump($result);//执行后输出--string(24) "SELECT * FROM `sp_dept` "
  1. }

跟踪信息的SQL显示:

  1. SHOW COLUMNS FROM `sp_dept` [ RunTime:0.0050s ]//翻译为熊sp_dept显示列,而且还在sql语句前输出,所以可以断定是表示模型实例化
  2. SELECT * FROM `sp_dept` [ RunTime:0.0000s ]

④别名:因为getLastSql书写不便,所以在3.2版本之后起了个别名_sql,用法与之前一致。语法:$model->_sql();

(4)性能调试

之前写过测试代码执行时间的功能,一个代码开始执行时间和结束时间相减获得时间戳,然后计算出执行所耗时间,以此来测试性能。

在ThinkPHP中系统提供了性能测试的快速方法G。

目前所学过的快速方法:U(URL组装),D(实例化自定义模型),M(实例化父类模型),G(性能测试)

语法:如果第三个参数是数字,则表示统计代码的执行时间,数字表示精确的小数位数(单位:us微秒---1秒=1000毫秒=1000000微秒);若为字符m,则表示统计内存开销(单位:byt),这种需要服务器的支持

  1. G('开始标记')
  2. //需要统计效率的代码段
  3. G('结束标记')
  4. G'开始标记','结束标记',‘数字 / 字符’)

案例:使用G方法统计某段代码执行时间开销

  1. public function test(){
  2. //定义开始标记
  3. G('start');
  4. //代码段
  5. for($i=0;$i<100000;$i++){
  6. // echo $i;
  7. }
  8. //结束标记
  9. G('stop');
  10. //开始统计,4表示精确到后4位小数
  11. echo G('start','stop',4);
  12. }

测试后输出:0.0030,所以执行了0.0030秒

.

ThinkPHP---thinkphp实用项的更多相关文章

  1. ThinkPHP实用项

    跟踪信息 – 两种模式 – Sql调试 – 性能调试

  2. 攻城记:Thinkphp框架的项目规划总结和踩坑经验

    一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...

  3. thinkphp模型

    1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...

  4. thinkphp一句话疑难解决笔记 3

    错误调试, E($msg)? 这个是tp内置的E 方法, E 函数. 它是tp抛异常 的另外一种方式. 默认的异常处理方式是, 在 框架下的 ThinkPHP/Tpl/think_exception. ...

  5. thinkPHP入门

    什么是框架 框架就是一定结构的代码,框架提供一个开发web程序的基础架构以及常用的功能 代码,PHP框架的web程序开发拜倒了流水线上. php框架就是一定要按别人规定好的架构编写. php开发框架有 ...

  6. 关于在BAE上部署ThinkPHP框架的问题

    现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...

  7. ThinkPHP学习(一)

    下载3.2框架后,解压缩到web目录下面,可以看到初始的目录结构如下: 3.2版本相比之前的版本自带了一个完整的应用目录结构和默认的应用入口文件,开发人员可以在这个基 础之上灵活调整.其中, Appl ...

  8. Thinkphp学习回顾(一)之基本结构目录

    TP框架的学习一般都是从了解框架的基本结构开始的,每个文件都有其专属的作用,我的TP框架的回顾也从基本结构开始讲起. 一.ThinkPHP的获取 http://www.thinkphp.cn   这是 ...

  9. ThinkPHP 3.2.3(三)架构之模块化设计

    一.概念 应用:基于同一个入口文件访问的项目称之为一个应用. 模块:一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录,是一个包含配置文件.函数文件和MVC文件(目录)的集合. ...

随机推荐

  1. Android如何进行单元测试

    Menifest.xml中加入: <application>中加入: <uses-library android:name="android.test.runner&quo ...

  2. Android 最火框架XUtils之注解机制具体解释

    在上一篇文章Android 最火的高速开发框架XUtils中简介了xUtils的基本用法,这篇文章说一下xUtils里面的注解原理. 先来看一下xUtils里面demo的代码: @ViewInject ...

  3. react 引入 百度地图API

    使用 Echarts 的地图的时候,发现报错,说 Bmap api is not loaded 百度地图API没有加载 乍一想,Echarts 用的也是 百度地图 啊,没有引入百度地图,还用个啥,当然 ...

  4. SQLServer IP不能登录问题解决

    最近项目项目需要,要在windows2008R2服务器上部署项目,可是客户那边服务器上SqlServer也没有安装,一切都要自己解决,所以我就找了个2008的版本,进行安装,安装过程没有遇到什么问题, ...

  5. SDK Manager配置

    改Host的都是扯淡,现在不好使了.. 还是使用东软的国内镜像好使,打开SDK Manager Tools - Options Http proxy Server:  mirrors.neusoft. ...

  6. python 时区

    Python中的时区处理  http://tech.glowing.com/cn/dealing-with-timezone-in-python/ Python时区设置方法与pytz查询时区教程_py ...

  7. Bing必应地图中国API-显示兴趣点 (转)

    Bing必应地图中国API-显示兴趣点 2011-05-24 14:29:55|  分类: Bing&Google|字号 订阅     在地图上显示一个兴趣点,这个应用可以说是最简单但是最广泛 ...

  8. 【POJ 3070】 Fibonacci

    [题目链接]            点击打开链接 [算法]           矩阵乘法快速幂 [代码] #include <algorithm> #include <bitset& ...

  9. npm 是干什么的?

    网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话题. 本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了 ...

  10. attr 和 prop的区别和使用

    一. attr和prop的区别 要想弄清楚attr和prop的区别,就要先搞清楚js中使用DOM方法获取设置属性和使用对象方法获取设置属性的区别. 在javascript中使用DOM方法设置获取属性值 ...