Home >PHP Framework >ThinkPHP >Let's talk about THINKPHP debugging mode and exception handling
The followingthinkphp frameworktutorial column will introduce to you how to enable THINKPHP debugging mode and exception handling. I hope it will be helpful to friends in need!
It is very simple to turn on the debug mode. You only need to add a line of constant definition code to the entry file:
<?php // 开启调试模式 define('APP_DEBUG', true); // 定义应用目录 define('APP_PATH', './Application/'); // 加载框架入口文件 require './ThinkPHP/ThinkPHP.php';
When testing, turn on the DEBUG debugging mode. In development mode , automatically generate cache files, automatically call cached files during testing, and errors will occur
After completing the development phase and deploying to the production environment, you only need to turn off the debugging mode or delete the debugging mode definition code to switch to the deployment mode.
<?php // 关闭调试模式 define('APP_DEBUG', false); // 定义应用目录 define('APP_PATH', './Application/'); // 加载框架入口文件 require './ThinkPHP/ThinkPHP.php';
The advantages of debugging mode are:
Once the debugging mode is turned off, No specific error message will be prompted after an error occurs. If you still want to see the specific error message, you can set it as follows:
'SHOW_ERROR_MSG' => true, // 显示错误信息
Once a serious error occurs in the system under debugging mode Exceptions will be thrown automatically, or exceptions can be thrown manually using ThinkPHP's built-in E method.
E('新增失败');
Can also support exception codes (default is 0), for example:
E('信息录入错误',25);
Modify the system default exception template file by setting the TMPL_EXCEPTION_FILE configuration parameter, for example:
'TMPL_EXCEPTION_FILE' => APP_PATH.'/Public/exception.tpl'
The exception variables that can be used in the exception template are:
$e['file']异常文件名 $e['line'] 异常发生的文件行数 $e['message'] 异常信息 $e['trace'] 异常的详细Trace信息
After an exception is thrown, a specific error message is usually displayed. If you do not want the user to see the specific error message, you can set the error to close. Display the information and set a unified error message, for example:
'SHOW_ERROR_MSG' => false, 'ERROR_MESSAGE' => '发生错误
Configure the ERROR_PAGE parameter to point all exceptions and errors to a unified page, thereby preventing users from seeing abnormal information. Usually used in deployment mode. The ERROR_PAGE parameter must be a complete URL address, for example:
'ERROR_PAGE' =>'/Public/error.html'
If it is not in the current domain name, you can also specify the domain name:
'ERROR_PAGE' =>'http://www.myDomain.com/Public/error.html'
Note that the page pointed to by ERROR_PAGE cannot use exceptions anymore Template variables.
By default, logging is only recorded in debug mode. To enable logging in deployment mode, the LOG_RECORD
parameter must be enabled in the configuration, and You can configure the log level that needs to be recorded in the application configuration file, for example:
'LOG_RECORD' => true, // 开启日志记录 'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误
ThinkPHP classifies system logs according to levels, including:
The log recording method defaults to file mode and can be expanded to support more recording methods through the driver.
The recording method is configured by the LOG_TYPE parameter, for example:
'LOG_TYPE' => 'File', // 日志记录类型 默认为文件方式
File mode recording, the corresponding driver file is located in the system's
Library/Think/Log/Driver/File.class .php
.
Generally, the system's logging is automatic and manual recording is not required. However, sometimes it is also necessary to manually record log information. The Log class provides 3 Method for logging.
Method | Description |
---|---|
Record log information to memory | |
Write the log information saved in memory (using the specified recording method) | |
Write a log message in real time |
选项卡 | 描述 |
---|---|
基本 | 当前页面的基本摘要信息,例如执行时间、内存开销、文件加载数、查询次数等等。 |
文件 | 详细列出当前页面执行过程中加载的文件及其大小。 |
流程 | 会列出当前页面执行到的行为和相关流程(待完善)。 |
错误 | 当前页面执行过程中的一些错误信息,包括警告错误。 |
SQL | 当前页面执行到的SQL语句信息。 |
调试 | 开发人员在程序中进行的调试输出。 |
页面Trace的选项卡是可以定制和扩展的,默认的配置为:
'TRACE_PAGE_TABS'=>array( 'base'=>'基本', 'file'=>'文件', 'think'=>'流程', 'error'=>'错误', 'sql'=>'SQL', 'debug'=>'调试' )
把刚才的用户信息调试输出到用户选项卡,trace方法的用法如下:
trace($user,'用户信息','user');
保存这些trace信息,我们可以配置PAGE_TRACE_SAVE
参数
'PAGE_TRACE_SAVE'=>true
如果不希望保存所有的选项卡的信息,可以设置需要保存的选项卡,例如:
'PAGE_TRACE_SAVE' => array('base','file','sql');
页面Trace只能用于有页面输出的情况,但是trace方法可以用在任何情况,而且trace方法可以用于AJAX等操作。
Trace方法的格式:
trace('变量','标签','级别','是否记录日志')
例如:
$info = '测试信息'; trace($info,'提示');
如果希望把变量调试输出到页面Trace的某个选项卡里面,可以使用:
trace($info,'提示','user');
如果是输出到ERR选项卡,并且开启 'TRACE_EXCEPTION'=>true
的话,
trace($info,'错误','ERR');
会抛出异常。 有三种情况下,trace方法会记录日志:
AJAX请求
SHOW_PAGE_TRACE为false,也就是页面Trace关闭的情况下
trace方法的第四个参数为true
凭借强大的页面Trace信息功能支持,ThinkPHP可以支持断点调试功能。 我们只需要在不同的位置对某个变量进行trace输出即可,例如:
$blog = D("Blog"); $vo = $blog->create(); trace($vo,'create vo'); $vo = $blog->find(); trace($vo,'find vo');
输出某个变量是开发过程中经常会用到的调试方法
用法:
dump($var, $echo=true, $label=null, $strict=true)
相关参数的使用如下:
参数 | 描述 |
---|---|
var(必须) | 要输出的变量,支持所有变量类型 |
echo(可选) | 是否直接输出,默认为true,如果为false则返回但不输出 |
label(可选) | 变量输出的label标识,默认为空 |
strict(可选) | 输出变量类型,默认为true,如果为false则采用print_r输出 |
如果echo参数为false 则返回要输出的字符串
使用示例:
$Blog = D("Blog"); $blog = $Blog->find(3); dump($blog);
G方法可以很方便的获取某个区间的运行时间和内存占用情况。 例如:
G('begin'); // ...其他代码段 G('end'); // ...也许这里还有其他代码 // 进行统计区间 echo G('begin','end').'s';
G('begin','end') 表示统计begin位置到end位置的执行时间(单位是秒),begin必须是一个已经标记过的位置,如果这个时候end位置还没被标记过,则会自动把当前位置标记为end标签,输出的结果类似于:0.0056s
默认的统计精度是小数点后4位,如果觉得这个统计精度不够,还可以设置例如:
G('begin','end',6).'s';
可能的输出会变成:0.005587s
如果你的环境支持内存占用统计的话,还可以使用G方法进行区间内存开销统计(单位为kb),例如:
echo G('begin','end','m').'kb';
第三个参数使用m表示进行内存开销统计,输出的结果可能是:625kb
如果需要我们可以使用E方法输出错误信息并中断执行,例如:
//输出错误信息,并中止执行 E($msg);
在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的SQL语句,我们可以用getLastsql
方法来输出上次执行的sql语句。例如:
$User = M("User"); // 实例化User对象 $User->find(1); echo $User->getLastSql(); // 3.2版本中可以使用简化的方法 echo $User->_sql();
每个模型都使用独立的最后SQL记录,互不干扰,但是可以用空模型的getLastSql方法获取全局的最后SQL记录
在模型操作中,还可以获取数据库的错误信息,例如:
$User = M("User"); // 实例化User对象 $result = $User->find(1); if(false === $result){ echo $User->getDbError(); }
CURD操作如果返回值为false,表示数据库操作发生错误,这个时候就需要使用模型的getDbError方法来查看数据库返回的具体错误信息。
The above is the detailed content of Let's talk about THINKPHP debugging mode and exception handling. For more information, please follow other related articles on the PHP Chinese website!