iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >THINKPHP调试模式及异常处理的方法是什么
  • 702
分享到

THINKPHP调试模式及异常处理的方法是什么

2023-06-26 06:06:58 702人浏览 八月长安
摘要

这篇文章主要讲解了“THINKPHP调试模式及异常处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“THINKphp调试模式及异常处理的方法是什么”吧!调试模式开启调试模式很简单

这篇文章主要讲解了“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参数,以及可以在应用配置文件中配置需要记录的日志级别,例如:

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

日志级别

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

  • EMERG 严重错误,导致系统崩溃无法使用

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

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

  • ERR 一般性错误

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

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

  • INFO 信息,程序输出信息

  • DEBUG 调试,用于调试信息

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

记录方式

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

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

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

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

手动记录

一般情况下,系统的日志记录是自动的,无需手动记录,但是某些时候也需要手动记录日志信息,Log类提供了3个方法用于记录日志。

方法描述
Log::record()记录日志信息到内存
Log::save()把保存在内存中的日志信息(用指定的记录方式)写入
Log::write()实时写入一条日志信息

由于系统在请求结束后会自动调用Log::save方法,所以通常,你只需要调用Log::record记录日志信息即可。

默认记录的日志级别是ERR,也可以指定日志级别:

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

record方法只会记录当前配置允许记录的日志级别的信息,如果应用配置为:

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

那么上面的record方法记录的日志信息会被直接过滤,或者你可以强制记录:

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

采用record方法记录的日志信息不是实时保存的,如果需要实时记录的话,可以采用write方法,例如:

Think\Log::write('测试日志信息,这是警告级别,并且实时写入','WARN');

write方法写入日志的时候 不受配置的允许日志级别影响,可以实时写入任意级别的日志信息。

页面trace

在部署模式下面,显示的调试信息没有调试模式完整,通常我们建议页面Trace配合调试模式一起使用。

要开启页面Trace功能,需要在项目配置文件中设置:

// 显示页面Trace信息'SHOW_PAGE_TRACE' =>true,

该参数默认为关闭,开启后并且你的页面有模板输出的话,页面右下角会显示ThinkPHP的LOGo

我们看到的LOGO后面的数字就是当前页面的执行时间(单位是秒) 点击该图标后,会展开详细的页面Trace信息,如图:

页面Trace框架有6个选项卡,分别是基本、文件、流程、错误、SQL和调试,点击不同的选项卡会切换到不同的Trace信息窗口。

选项卡描述
基本当前页面的基本摘要信息,例如执行时间、内存开销、文件加载数、查询次数等等。
文件详细列出当前页面执行过程中加载的文件及其大小。
流程会列出当前页面执行到的行为和相关流程(待完善)。
错误当前页面执行过程中的一些错误信息,包括警告错误。
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方法可以用在任何情况,而且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调试模式及异常处理的方法是什么”的内容了,经过本文的学习后,相信大家对THINKPHP调试模式及异常处理的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: THINKPHP调试模式及异常处理的方法是什么

本文链接: https://www.lsjlt.com/news/307376.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • THINKPHP调试模式及异常处理的方法是什么
    这篇文章主要讲解了“THINKPHP调试模式及异常处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“THINKPHP调试模式及异常处理的方法是什么”吧!调试模式开启调试模式很简单...
    99+
    2023-06-26
  • python异常处理并调试的方法
    这篇文章主要介绍“python异常处理并调试的方法”,在日常操作中,相信很多人在python异常处理并调试的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python异常处理并调试的方法”的疑惑有所帮助!...
    99+
    2023-06-29
  • pycharm的debug调试以及异常,Python 中错误的处理方式
    在b站看了详细的视频教程,做一个系统的总结。第一次写关于pycharm的debug调试以及python代码运行报错处理的帖子,错误地方请大家指出。 第一个部分:pycharm的debug调试 作为一个...
    99+
    2023-09-08
    python
  • JAVA异常处理方式是什么
    这篇文章主要讲解了“JAVA异常处理方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA异常处理方式是什么”吧!1:try-catch结构:*  结构: * ...
    99+
    2023-06-03
  • Python常见异常的处理方式是什么
    这篇文章主要介绍“Python常见异常的处理方式是什么”,在日常操作中,相信很多人在Python常见异常的处理方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python常见异常的处理方式是什么”的疑...
    99+
    2023-07-05
  • Scala异常处理的方法是什么
    这篇文章主要介绍“Scala异常处理的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Scala异常处理的方法是什么”文章能帮助大家解决问题。Scala异常处理Scala是一种多范式的编程语...
    99+
    2023-07-05
  • Scala异常处理方法是什么
    这篇“Scala异常处理方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Scala异常处理方法是什么”文章吧。Sca...
    99+
    2023-06-27
  • Java异常类型分析及处理方法是什么
    今天就跟大家聊聊有关Java异常类型分析及处理方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言:Java异常,大家都很熟悉。但是对于具体怎么分类的,JVM对其怎么处理的,...
    99+
    2023-06-22
  • Java异常处理的的方法是什么
    本篇内容主要讲解“Java异常处理的的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java异常处理的的方法是什么”吧!1) 为可恢复的错误使用检查型异常,为编程错误使用非检查型错误。...
    99+
    2023-06-16
  • Python中的异常处理方法是什么
    这篇文章主要介绍“Python中的异常处理方法是什么”,在日常操作中,相信很多人在Python中的异常处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的异常处理方法是什么”的疑惑有所...
    99+
    2023-07-06
  • python中异常处理的方法是什么
    Python中的异常处理方法是使用`try-except`语句块来捕获和处理异常。以下是一些常见的异常处理方法:1. 使用`try-...
    99+
    2023-08-08
    python
  • SpringBoot全局异常处理方式是什么
    这篇文章主要讲解了“SpringBoot全局异常处理方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot全局异常处理方式是什么”吧!SpringBoot全局异常处理为...
    99+
    2023-06-25
  • springboot全局异常处理的方法是什么
    在Spring Boot中,可以使用`@ControllerAdvice`和`@ExceptionHandler`注解来实现全局异常...
    99+
    2023-10-07
    springboot
  • java项目异常处理的方法是什么
    在Java项目中,有多种方法可以处理异常,包括:1. try-catch块:使用try-catch块可以捕获并处理异常。在try块中...
    99+
    2023-09-16
    java
  • kotlin协程异常处理的方法是什么
    Kotlin协程的异常处理方法有以下几种:1. 使用try/catch块:在协程内部使用try/catch块来捕获异常,并对异常进行...
    99+
    2023-09-20
    kotlin
  • Springboot统一异常处理的方法是什么
    Spring Boot提供了一个全局异常处理的方法,可以通过编写一个`@ControllerAdvice`注解的类来实现统一异常处理...
    99+
    2023-08-09
    Springboot
  • Python异常捕获和处理的方法是什么
    1 | 语法错误指解析代码时出现的错误。当代码不符合Python 语法规则时,Python解释器在解析时就会报出 SyntaxError 语法错误,与此同时还会明确指出最早探测到错误的语句。例如:print "Hello,Worl...
    99+
    2023-05-23
    Python
  • r语言异常值处理的方法是什么
    在R语言中,可以使用以下方法来处理异常值:1. 箱线图(boxplot):使用箱线图可以直观地识别异常值。可以使用`boxplot(...
    99+
    2023-09-14
    r语言
  • JS异常抛出和处理的方法是什么
    今天小编给大家分享一下JS异常抛出和处理的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。抛出异常在 js 中,有时...
    99+
    2023-07-04
  • c++ cmake调试及配置的方法是什么
    在C++中使用CMake进行调试和配置主要有以下几个步骤:1. 安装CMake:首先需要安装CMake工具,可以从CMake官网下载...
    99+
    2023-10-18
    c++ cmake
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作