zoukankan      html  css  js  c++  java
  • ThinkPHP调试工具及空操作

    1.1  DEBUG模式开启

    启调试模式很简单,只需要在入口文件中增加一行常量定义代码:

        define('APP_DEBUG', true);
    

     在完成开发阶段部署到生产环境后,只需要删除调试模式定义代码即可切换到部署模式。开启调试模式后,系统会首先加载系统默认的调试配置文件,然后加载项目的调试配置文件,调试模式的优势在于:

    • 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;
    • 关闭模板缓存,模板修改可以即时生效;
    • 记录SQL日志,方便分析SQL;
    • 关闭字段缓存,数据表字段修改不受缓存影响;
    • 严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署问题;
    • 可以方便用于开发过程的不同阶段,包括开发、测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件;

    1.2  Debug模式下常用参数

    ShowPageTrace行为配置 

    SHOW_PAGE_TRACE 显示页面Trace信息  false

    ShowRuntime行为配置 

    SHOW_RUN_TIME 是否显示运行时间  false

    SHOW_ADV_TIME 是否显示详细的运行时间  false

    SHOW_DB_TIMES 是否显示数据库查询和写入次数  false

    SHOW_CACHE_TIMES 是否显示缓存操作次数  false

    SHOW_USE_MEM 是否显示内存开销  false

    SHOW_LOAD_FILE 是否显示加载文件数  false

    SHOW_FUN_TIMES 是否显示函数调用次数  false

    1.3  Debug模式下的日志级别

    ThinkPHP对系统的日志按照级别来分类,包括:EMERG 严重错误,导致系统崩溃无法使用

    ALERT 警戒性错误, 必须被立即修改的错误

    CRIT 临界值错误, 超过临界值的错误

    ERR 一般性错误

    WARN 警告性错误, 需要发出警告的错误

    NOTICE 通知,程序可以运行但是还不够完美的错误

    INFO 信息,程序输出信息

    DEBUG 调试,用于调试信息

    SQL SQL语句,该级别只在调试模式开启时有效

    要开启日志记录,必须在配置中开启LOG_RECORD参数,以及可以在项目配置文件中配置需要记录的日志级别,例如:

    'LOG_RECORD' => true, // 开启日志记录

    'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

    1.4  Trace信息

    如果没有配置应用状态,系统默认则默认为debug状态,也就是说默认的配置参数是:

    'APP_STATUS' => 'debug', //应用调试模式状态
    

     如果检测到项目的配置目录中有存在debug.php文件,则会自动加载该配置文件,并且和系统项目配置文件以及系统调试配置文件合并,也就是说,debug.php配置文件只需要配置和项目配置文件以及系统调试配置文件不同的参数或者新增的参数。

    如果想在调试模式下面增加应用状态,例如测试状态,则可以在项目配置文件中改变设置如下:

    'APP_STATUS' => 'test', //应用调试模式状态
    

     这样的话,系统会自动尝试加载项目配置目录下面的test.php 配置文件,可以在test配置文件中改变相关设置,例如改变测试数据库的连接信息等等。

    由于调试模式没有任何缓存,因此涉及到较多的文件IO操作和模板实时编译,所以在开启调试模式的情况下,性能会有一定的下降,但不会影响部署模式的性能。

    注意:一旦关闭调试模式,项目的调试配置文件即刻失效。

    2  自定义DEBUG模式(调试配置)

    新版增强了调试模式的配置文件,在开启调试模式的状态下,可以给项目设置不同的应用状态,并加载不同的项目配置文件,但是无论如何,都会首先导入框架默认的调试模式配置文件,该文件位于系统目录的Conf\debug.php。
    通常情况下,调试配置文件里面可以进行一些开发模式所需要的配置。例如,配置额外的数据库连接用于调试,开启日志写入便于查找错误信息、开启页面Trace输出更多的调试信息等等。
    注意:3.0版本的调试模式默认没有开启运行时间显示和页面Trace显示,需要自行开启,并且建议调试模式只开启页面Trace即可,新版的页面Trace显示信息已经包含了运行时间显示。
    如果没有配置应用状态,系统默认则默认为debug状态,也就是说默认的配置参数是:

    'APP_STATUS' => 'debug', //应用调试模式状态
    

     如果检测到项目的配置目录中有存在debug.php文件,则会自动加载该配置文件,并且和系统项目配置文件以及系统调试配置文件合并,也就是说,debug.php配置文件只需要配置和项目配置文件以及系统调试配置文件不同的参数或者新增的参数。
    如果想在调试模式下面增加应用状态,例如测试状态,则可以在项目配置文件中改变设置如下:

        'APP_STATUS' => 'test', //应用调试模式状态
    

     这样的话,系统会自动尝试加载项目配置目录下面的test.php 配置文件,可以在test配置文件中改变相关设置,例如改变测试数据库的连接信息等等。
    由于调试模式没有任何缓存,因此涉及到较多的文件IO操作和模板实时编译,所以在开启调试模式的情况下,性能会有一定的下降,但不会影响部署模式的性能。
    注意:一旦关闭调试模式,项目的调试配置文件即刻失效。

    3.1  空模块

    空模块的概念是指当系统找不到指定的模块名称的时候,系统会尝试定位空模块(EmptyAction),利用这个机制我们可以用来定制错误页面和进行URL的优化。

    现在我们把前面的需求进一步,把URL由原来的

    http://serverName/index.php/City/shanghai/

    变成

    http://serverName/index.php/shanghai/

    这样更加简单的方式,如果按照传统的模式,我们必须给每个城市定义一个Action类,然后在每个Action类的index方法里面进行处理。 可是如果使用空模块功能,这个问题就可以迎刃而解了。 我们可以给项目定义一个EmptyAction类

    <?php
        class EmptyAction extends Action{
            public function index(){
                //根据当前模块名来判断要执行那个城市的操作
                 $cityName = MODULE_NAME;
                $this->city($cityName);
            }
            //注意 city方法 本身是 protected 方法
            protected function city($name){
                //和$name这个城市相关的处理
                 echo '当前城市' . $name;
            }
        }
    

    接下来,我们就可以在浏览器里面输入

    http://serverName/index.php/beijing/

    http://serverName/index.php/shanghai/

    http://serverName/index.php/shenzhen/

    由于系统并不存在beijing、shanghai或者shenzhen模块,因此会定位到空模块(EmptyAction)去执行

    空模块和空操作还可以同时使用,用以完成更加复杂的操作。

    3.2  空操作

    空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

    例如,下面我们用空操作功能来实现一个城市切换的功能。

    我们只需要给CityAction类定义一个_empty (空操作)方法:

    <?php

        class CityAction extends Action{

            public function _empty($name){

                //把所有城市的操作解析到city方法

                $this->city($name);

            }

           

            //注意 city方法 本身是 protected 方法

            protected function city($name){

                //和$name这个城市相关的处理

                 echo '当前城市' . $name;

            }

        }

    接下来,我们就可以在浏览器里面输入

    http://serverName/index.php/City/beijing/

    http://serverName/index.php/City/shanghai/

    http://serverName/index.php/City/shenzhen/

    由于CityAction并没有定义beijing、shanghai或者shenzhen操作方法,因此系统会定位到空操作方法 _empty中去解析,_empty方法的参数就是当前URL里面的操作名,因此会看到依次输出的结果是:

    当前城市:beijing

    当前城市:shanghai

    当前城市:shenzhen

  • 相关阅读:
    分治
    #include<algorithm>
    c++标准模板库的使用
    mysql_day03
    mysql_day02
    mysql_day01
    mongodb的安装
    迭代器和生成器简单介绍
    File文件操作
    数据类型
  • 原文地址:https://www.cnblogs.com/Hebe/p/3032278.html
Copyright © 2011-2022 走看看