zoukankan      html  css  js  c++  java
  • ThinkPHP---thinkphp实用项

    【一】代码调试

    (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里(数据库配置信息所在文件)。

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

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

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

    (2)两种模式

    ①分类及区别:

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

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

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

    ②详解:

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

    // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
    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语句

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

     跟踪信息的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),这种需要服务器的支持

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

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

    public function test(){
                //定义开始标记
                G('start');
                //代码段
                for($i=0;$i<100000;$i++){
                    // echo $i;
                }
                //结束标记
                G('stop');
                //开始统计,4表示精确到后4位小数
                echo G('start','stop',4);
    }

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

    .

  • 相关阅读:
    Java的一天学习
    IIS7配置PHP图解
    主流HTML5游戏框架的分析和对比
    HTTP请求
    hibernate -- 数据库连接池的失效检查设置
    mysql备份
    深入探索SOAP1.1--使用SAAJ1.2.1
    JDBC连接执行MySQL存储过程报权限错误
    mysql(connector/ODBC)
    mysql查询优化(三)
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8671366.html
Copyright © 2011-2022 走看看