广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买
下面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';登录后复制
调试模式的优势在于:
开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;关闭模板缓存,模板修改可以即时生效;记录SQL日志,方便分析SQL;关闭字段缓存,数据表字段修改不受缓存影响;严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署可能导致的隐患问题;通过页面Trace功能更好的调试和发现错误;一旦关闭调试模式,发生错误后不会提示具体的错误信息,如果你仍然希望看到具体的错误信息,那么可以如下设置:
'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'登录后复制
日志记录注意ERROR_PAGE所指向的页面不能再使用异常的模板变量了。
默认情况下只是在调试模式记录日志,要在部署模式开启日志记录,必须在配置中开启LOG_RECORD
参数,以及可以在应用配置文件中配置需要记录的日志级别,例如:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';0登录后复制日志级别
ThinkPHP对系统的日志按照级别来分类,包括:
EMERG 严重错误,导致系统崩溃无法使用ALERT 警戒性错误, 必须被立即修改的错误CRIT 临界值错误, 超过临界值的错误ERR 一般性错误WARN 警告性错误, 需要发出警告的错误NOTICE 通知,程序可以运行但是还不够完美的错误INFO 信息,程序输出信息DEBUG 调试,用于调试信息SQL SQL语句,该级别只在调试模式开启时有效记录方式日志的记录方式默认是文件方式,可以通过驱动的方式来扩展支持更多的记录方式。
记录方式由LOG_TYPE参数配置,例如:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';1登录后复制
手动记录File方式记录,对应的驱动文件位于系统的
Library/Think/Log/Driver/File.class.php
。
一般情况下,系统的日志记录是自动的,无需手动记录,但是某些时候也需要手动记录日志信息,Log类提供了3个方法用于记录日志。
由于系统在请求结束后会自动调用Log::save方法,所以通常,你只需要调用Log::record记录日志信息即可。
默认记录的日志级别是ERR,也可以指定日志级别:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';2登录后复制
record方法只会记录当前配置允许记录的日志级别的信息,如果应用配置为:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';3登录后复制
那么上面的record方法记录的日志信息会被直接过滤,或者你可以强制记录:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';4登录后复制
采用record方法记录的日志信息不是实时保存的,如果需要实时记录的话,可以采用write方法,例如:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';5登录后复制
write方法写入日志的时候 不受配置的允许日志级别影响,可以实时写入任意级别的日志信息。
页面trace在部署模式下面,显示的调试信息没有调试模式完整,通常我们建议页面Trace配合调试模式一起使用。
要开启页面Trace功能,需要在项目配置文件中设置:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';6登录后复制
该参数默认为关闭,开启后并且你的页面有模板输出的话,页面右下角会显示ThinkPHP的LOGO:
我们看到的LOGO后面的数字就是当前页面的执行时间(单位是秒) 点击该图标后,会展开详细的页面Trace信息,如图:
页面Trace框架有6个选项卡,分别是基本、文件、流程、错误、SQL和调试,点击不同的选项卡会切换到不同的Trace信息窗口。
页面Trace的选项卡是可以定制和扩展的,默认的配置为:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';7登录后复制
把刚才的用户信息调试输出到用户选项卡,trace方法的用法如下:
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';8登录后复制
保存这些trace信息,我们可以配置PAGE_TRACE_SAVE
参数
<?php// 关闭调试模式define('APP_DEBUG', false);// 定义应用目录define('APP_PATH', './Application/');// 加载框架入口文件require './ThinkPHP/ThinkPHP.php';9登录后复制
如果不希望保存所有的选项卡的信息,可以设置需要保存的选项卡,例如:
'SHOW_ERROR_MSG' => true, // 显示错误信息0登录后复制Trace方法
页面Trace只能用于有页面输出的情况,但是trace方法可以用在任何情况,而且trace方法可以用于AJAX等操作。
Trace方法的格式:
'SHOW_ERROR_MSG' => true, // 显示错误信息1登录后复制
例如:
'SHOW_ERROR_MSG' => true, // 显示错误信息2登录后复制
如果希望把变量调试输出到页面Trace的某个选项卡里面,可以使用:
'SHOW_ERROR_MSG' => true, // 显示错误信息3登录后复制
如果是输出到ERR选项卡,并且开启 'TRACE_EXCEPTION'=>true
的话,
'SHOW_ERROR_MSG' => true, // 显示错误信息4登录后复制
会抛出异常。 有三种情况下,trace方法会记录日志:
AJAX请求
SHOW_PAGE_TRACE为false,也就是页面Trace关闭的情况下
trace方法的第四个参数为true
断点调试凭借强大的页面Trace信息功能支持,ThinkPHP可以支持断点调试功能。 我们只需要在不同的位置对某个变量进行trace输出即可,例如:
'SHOW_ERROR_MSG' => true, // 显示错误信息5登录后复制变量调试
输出某个变量是开发过程中经常会用到的调试方法
用法:
'SHOW_ERROR_MSG' => true, // 显示错误信息6登录后复制
相关参数的使用如下:
如果echo参数为false 则返回要输出的字符串
使用示例:
'SHOW_ERROR_MSG' => true, // 显示错误信息7登录后复制性能调试
G方法可以很方便的获取某个区间的运行时间和内存占用情况。 例如:
'SHOW_ERROR_MSG' => true, // 显示错误信息8登录后复制
G('begin','end') 表示统计begin位置到end位置的执行时间(单位是秒),begin必须是一个已经标记过的位置,如果这个时候end位置还没被标记过,则会自动把当前位置标记为end标签,输出的结果类似于:0.0056s
默认的统计精度是小数点后4位,如果觉得这个统计精度不够,还可以设置例如:
'SHOW_ERROR_MSG' => true, // 显示错误信息9登录后复制
可能的输出会变成:0.005587s
如果你的环境支持内存占用统计的话,还可以使用G方法进行区间内存开销统计(单位为kb),例如:
E('新增失败');0登录后复制
第三个参数使用m表示进行内存开销统计,输出的结果可能是:625kb
如果需要我们可以使用E方法输出错误信息并中断执行,例如:
E('新增失败');1登录后复制模型调试调试执行的SQL语句
在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的SQL语句,我们可以用getLastsql
方法来输出上次执行的sql语句。例如:
E('新增失败');2登录后复制
每个模型都使用独立的最后SQL记录,互不干扰,但是可以用空模型的getLastSql方法获取全局的最后SQL记录
调试数据库错误信息在模型操作中,还可以获取数据库的错误信息,例如:
E('新增失败');3登录后复制
CURD操作如果返回值为false,表示数据库操作发生错误,这个时候就需要使用模型的getDbError方法来查看数据库返回的具体错误信息。
以上就是聊聊THINKPHP调试模式及异常处理的详细内容,更多请关注9543建站博客其它相关文章!
发表评论