>  기사  >  PHP 프레임워크  >  THINKPHP 디버깅 모드와 예외 처리에 대해 이야기해 보겠습니다.

THINKPHP 디버깅 모드와 예외 처리에 대해 이야기해 보겠습니다.

藏色散人
藏色散人앞으로
2022-01-18 17:00:244675검색

다음thinkphp 프레임워크튜토리얼 칼럼에서는 THINKPHP 디버깅 모드와 예외 처리를 활성화하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

디버그 모드

디버그 모드를 켜는 것은 매우 간단합니다. 항목 파일에 상수 정의 코드 한 줄만 추가하면 됩니다.

<?php
 // 开启调试模式
 define(&#39;APP_DEBUG&#39;, true);
 // 定义应用目录
 define(&#39;APP_PATH&#39;, &#39;./Application/&#39;);
 // 加载框架入口文件
 require &#39;./ThinkPHP/ThinkPHP.php&#39;;

테스트할 때 개발 모드에서 DEBUG 디버깅 모드를 켜세요. 캐시 파일이 자동으로 생성되어 테스트 중에 캐시가 자동 호출되면 오류가 발생합니다

개발 단계를 완료하고 프로덕션 환경에 배포한 후에는 디버그 모드를 끄거나 디버그 모드 정의를 삭제하기만 하면 됩니다. 배포 모드로 전환하는 코드입니다.

<?php
// 关闭调试模式
define(&#39;APP_DEBUG&#39;, false);
// 定义应用目录
define(&#39;APP_PATH&#39;, &#39;./Application/&#39;);
// 加载框架入口文件
require &#39;./ThinkPHP/ThinkPHP.php&#39;;

디버깅 모드의 장점은 다음과 같습니다.

  • 로깅을 활성화하면 디버깅을 용이하게 하기 위해 모든 오류 정보와 디버깅 정보가 자세히 기록됩니다.
  • 템플릿 캐싱을 끄면 템플릿 수정 사항이 즉시 적용될 수 있습니다. SQL 분석을 용이하게 하기 위해 ;
  • 필드 캐싱을 끄면 데이터 테이블 필드 수정이 캐시의 영향을 받지 않습니다.
  • 파일 대소문자를 엄격하게 검사하여(Windows 플랫폼에서도) Linux 배포로 인해 발생할 수 있는 잠재적인 문제를 미리 발견하는 데 도움이 됩니다.
  • 페이지 추적 기능을 통해 더 나은 디버깅 및 오류 찾기
  • 디버깅 모드가 꺼지면 오류가 발생한 후에도 특정 오류 메시지가 표시되지 않습니다. 여전히 특정 오류 메시지를 보려면 설정할 수 있습니다.
&#39;SHOW_ERROR_MSG&#39;        =>  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'  =>    '发生错误

Configuration

ERROR_PAGE

매개변수)는 모든 예외와 오류를 통합 페이지로 가리키므로 일반적으로 배포 모드에서 사용되는 예외 정보를 사용자가 볼 수 없습니다. ERROR_PAGE 매개변수는 완전한 URL 주소여야 합니다. 예:

'ERROR_PAGE' =>'/Public/error.html'
현재 도메인 이름에 없으면 다음과 같이 도메인 이름을 지정할 수도 있습니다.

'ERROR_PAGE' =>'http://www.myDomain.com/Public/error.html'

ERROR_PAGE가 가리키는 페이지는 더 이상 사용할 수 없습니다. 비정상적인 템플릿 변수.

Logging

기본적으로 로깅은 디버그 모드에서만 기록됩니다. 배포 모드에서 로깅을 활성화하려면 구성에서 LOG_RECORD 매개변수를 활성화해야 하며 필수 로깅은 다음에서 구성할 수 있습니다. 응용 프로그램 구성 파일입니다. 예:

'LOG_RECORD' => true, // 开启日志记录
'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

Log levelLOG_RECORD参数,以及可以在应用配置文件中配置需要记录的日志级别,例如:

'LOG_TYPE'              =>  'File', // 日志记录类型 默认为文件方式

日志级别

ThinkPHP对系统的日志按照级别来分类,包括:

  • EMERG 严重错误,导致系统崩溃无法使用
  • ALERT 警戒性错误, 必须被立即修改的错误
  • CRIT 临界值错误, 超过临界值的错误
  • ERR 一般性错误
  • WARN 警告性错误, 需要发出警告的错误
  • NOTICE 通知,程序可以运行但是还不够完美的错误
  • INFO 信息,程序输出信息
  • DEBUG 调试,用于调试信息
  • SQL SQL语句,该级别只在调试模式开启时有效

记录方式

日志的记录方式默认是文件方式,可以通过驱动的方式来扩展支持更多的记录方式。

记录方式由LOG_TYPE参数配置,例如:

Think\Log::record('测试日志信息,这是警告级别','WARN');

File方式记录,对应的驱动文件位于系统的Library/Think/Log/Driver/File.class.php

ThinkPHP는 다음을 포함하여 수준에 따라 시스템 로그를 분류합니다.

EMERG

심각한 오류로 인해 시스템이 중단되고 사용할 수 없게 됩니다 ALERTCRIT 중요한 값 오류, 중요한 값을 초과하는 오류ERRWARN 경고 오류, 경고가 필요한 오류NOTICEINFODEBUG 디버깅, 디버깅 정보에 사용
경고 오류, 즉시 수정해야 하는 오류
일반 오류
알림, 프로그램 실행 가능하지만 아직 오류가 완벽하지 않습니다
정보, 프로그램 출력 정보
🎜SQL🎜 SQL 문, 이 수준만 유효합니다. 디버그 모드가 켜졌을 때🎜🎜🎜기록 방식🎜 🎜로그의 기본 기록 방식은 파일 방식이며, 드라이버를 통해 확장하여 더 많은 기록 방식을 지원할 수 있습니다. 🎜🎜기록 방법은 LOG_TYPE 매개변수로 구성됩니다. 예: 🎜
'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误
🎜🎜파일 모드 기록, 해당 드라이버 파일은 시스템의 Library/Think/Log/Driver/File.class.php에 있습니다. 코드>. 🎜🎜🎜수동 기록🎜🎜일반적으로 시스템의 로깅은 자동이므로 수동 기록이 필요하지 않지만 때로는 로그 정보를 수동으로 기록해야 하는 경우도 있습니다. Log 클래스는 로그를 기록하는 3가지 방법을 제공합니다. 🎜🎜🎜🎜🎜Method🎜🎜Description🎜🎜🎜🎜🎜🎜Log::record()🎜🎜로그 정보를 메모리에 기록합니다🎜🎜🎜🎜Log::save()🎜🎜메모리에 저장된 로그 정보를 저장합니다(Specified 사용) 기록방법) write🎜🎜🎜🎜Log::write()🎜🎜실시간으로 로그 메시지 쓰기🎜🎜🎜🎜<p>由于系统在请求结束后会自动调用Log::save方法,所以通常,你只需要调用Log::record记录日志信息即可。</p> <p>默认记录的日志级别是ERR,也可以指定日志级别:</p> <pre class="brush:php;toolbar:false">Think\Log::record('测试日志信息,这是警告级别','WARN');</pre> <p>record方法只会记录当前配置允许记录的日志级别的信息,如果应用配置为:</p> <pre class="brush:php;toolbar:false">'LOG_LEVEL'  =&gt;'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误</pre> <p>那么上面的record方法记录的日志信息会被直接过滤,或者你可以强制记录:</p> <pre class="brush:php;toolbar:false">Think\Log::record('测试日志信息,这是警告级别','WARN',true);</pre> <p>采用record方法记录的日志信息不是实时保存的,如果需要实时记录的话,可以采用write方法,例如:</p> <pre class="brush:php;toolbar:false">Think\Log::write('测试日志信息,这是警告级别,并且实时写入','WARN');</pre> <p>write方法写入日志的时候 不受配置的允许日志级别影响,可以实时写入任意级别的日志信息。</p> <h1>页面trace</h1> <blockquote><p>在部署模式下面,显示的调试信息没有调试模式完整,通常我们建议页面Trace配合调试模式一起使用。</p></blockquote> <p>要开启页面Trace功能,需要在项目配置文件中设置:</p> <pre class="brush:php;toolbar:false">// 显示页面Trace信息 'SHOW_PAGE_TRACE' =&gt;true,</pre> <p>该参数默认为关闭,开启后并且你的页面有模板输出的话,页面右下角会显示ThinkPHP的LOGO:</p> <p>我们看到的LOGO后面的数字就是当前页面的执行时间(单位是秒) 点击该图标后,会展开详细的页面Trace信息,如图:</p> <p>页面Trace框架有6个选项卡,分别是基本、文件、流程、错误、SQL和调试,点击不同的选项卡会切换到不同的Trace信息窗口。</p> <table> <thead><tr class="firstRow"> <th>选项卡</th> <th>描述</th> </tr></thead> <tbody> <tr> <td>基本</td> <td>当前页面的基本摘要信息,例如执行时间、内存开销、文件加载数、查询次数等等。</td> </tr> <tr> <td>文件</td> <td>详细列出当前页面执行过程中加载的文件及其大小。</td> </tr> <tr> <td>流程</td> <td>会列出当前页面执行到的行为和相关流程(待完善)。</td> </tr> <tr> <td>错误</td> <td>当前页面执行过程中的一些错误信息,包括警告错误。</td> </tr> <tr> <td>SQL</td> <td>当前页面执行到的SQL语句信息。</td> </tr> <tr> <td>调试</td> <td>开发人员在程序中进行的调试输出。</td> </tr> </tbody> </table> <p>页面Trace的选项卡是可以定制和扩展的,默认的配置为:</p> <pre class="brush:php;toolbar:false">'TRACE_PAGE_TABS'=&gt;array(     'base'=&gt;'基本',      'file'=&gt;'文件',      'think'=&gt;'流程',      'error'=&gt;'错误',      'sql'=&gt;'SQL',      'debug'=&gt;'调试' )</pre> <p>把刚才的用户信息调试输出到用户选项卡,trace方法的用法如下:</p> <pre class="brush:php;toolbar:false">trace($user,'用户信息','user');</pre> <p>保存这些trace信息,我们可以配置<code>PAGE_TRACE_SAVE参数

'PAGE_TRACE_SAVE'=>true

如果不希望保存所有的选项卡的信息,可以设置需要保存的选项卡,例如:

'PAGE_TRACE_SAVE' => array('base','file','sql');

Trace方法

页面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语句

在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的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方法来查看数据库返回的具体错误信息。

위 내용은 THINKPHP 디버깅 모드와 예외 처리에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제