Maison  >  Article  >  cadre php  >  Parlons du mode de débogage THINKPHP et de la gestion des exceptions

Parlons du mode de débogage THINKPHP et de la gestion des exceptions

藏色散人
藏色散人avant
2022-01-18 17:00:244675parcourir

La colonne tutoriellethinkphp framework suivante vous présentera comment activer le mode de débogage THINKPHP et la gestion des exceptions. J'espère que cela sera utile aux amis dans le besoin !

Mode débogage

Il est très simple d'activer le mode débogage. Il vous suffit d'ajouter une ligne de code de définition constante au fichier d'entrée :

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

Lors des tests, activez le mode de débogage DEBUG. le fichier cache est automatiquement généré et le cache est automatiquement appelé lors du test du fichier, une erreur se produira

Après avoir terminé la phase de développement et le déploiement dans l'environnement de production, il vous suffit de désactiver le mode débogage ou de supprimer la définition du mode débogage. code pour passer en mode déploiement.

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

Les avantages du mode débogage sont :

  • Activer la journalisation, toutes les informations d'erreur et de débogage seront enregistrées en détail pour faciliter le débogage ;
  • Désactiver la mise en cache des modèles, les modifications du modèle peuvent prendre effet immédiatement ; pour faciliter l'analyse SQL ;
  • Désactivez la mise en cache des champs, les modifications des champs de la table de données ne sont pas affectées par le cache ;
  • Vérifiez strictement la casse des fichiers (même sur la plate-forme Windows), vous aidant à découvrir à l'avance les problèmes potentiels pouvant être causés par le déploiement de Linux ;
  • Mieux via la page Fonction de trace Débogage et recherche d'erreurs
  • Une fois le mode de débogage désactivé, aucun message d'erreur spécifique ne sera affiché après qu'une erreur se produit. Si vous souhaitez toujours voir le message d'erreur spécifique, vous pouvez le définir. comme suit :
&#39;SHOW_ERROR_MSG&#39;        =>  true,    // 显示错误信息

Gestion des exceptions

Mode débogage Ci-dessous, dès qu'une erreur grave se produit dans le système, une exception sera automatiquement levée. Vous pouvez également utiliser la méthode E intégrée de ThinkPHP pour lancer une exception manuellement.

E('新增失败');

peut également prendre en charge les codes d'exception (la valeur par défaut est 0), par exemple :

E('信息录入错误',25);

Modifiez le fichier de modèle d'exception par défaut du système en définissant le paramètre de configuration

TMPL_EXCEPTION_FILE

, par exemple :

'TMPL_EXCEPTION_FILE' => APP_PATH.'/Public/exception.tpl'
Les variables d'exception qui peuvent être utilisées dans les modèles d'exception sont :

$e['file']异常文件名
$e['line'] 异常发生的文件行数
$e['message'] 异常信息
$e['trace'] 异常的详细Trace信息

Un message d'erreur spécifique sera généralement affiché après la levée d'une exception. Si vous ne souhaitez pas que l'utilisateur voie le message d'erreur spécifique, vous pouvez désactiver l'affichage du message d'erreur et définir un message d'erreur unifié. message d'erreur, par exemple :

'SHOW_ERROR_MSG' =>    false,
'ERROR_MESSAGE'  =>    '发生错误

Configuration

ERROR_PAGE

Paramètres, pointent toutes les exceptions et erreurs vers une page unifiée, empêchant ainsi les utilisateurs de voir les informations sur les exceptions, généralement utilisées en mode déploiement. Le paramètre ERROR_PAGE doit être une adresse URL complète, par exemple :

'ERROR_PAGE' =>'/Public/error.html'
Si elle n'est pas dans le nom de domaine actuel, vous pouvez également préciser le nom de domaine :

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

Notez que la page pointée par ERROR_PAGE ne peut plus utiliser variables de modèle anormales.

Logging

Par défaut, la journalisation est enregistrée uniquement en mode débogage. Pour activer la journalisation en mode déploiement, le paramètre LOG_RECORD doit être activé dans la configuration et la journalisation requise peut être configurée dans le fichier. fichier de configuration de l'application. Le niveau de journalisation, par exemple :

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

Niveau de journalLOG_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 classe les journaux du système en fonction du niveau, notamment :

EMERG

Erreurs graves, provoquant le crash du système et le rendant inutilisable ALERTECRIT Erreurs de valeur critique, erreurs qui dépassent la valeur critiqueERRWARN Erreurs d'avertissement, erreurs qui doivent être avertiesREMARQUEINFODEBUG Débogage, utilisé pour les informations de débogage
Erreurs d'alerte, doivent être des erreurs à corriger immédiatement
Erreurs générales
Notification, le programme peut s'exécuter Mais l'erreur n'est pas encore parfaite
Informations, informations de sortie du programme
🎜SQL🎜 Instruction SQL, ce niveau n'est valide que lorsque le mode débogage est activé🎜🎜🎜Méthode d'enregistrement🎜 🎜La méthode d'enregistrement par défaut du journal est la méthode de fichier, qui peut être étendue pour prendre en charge davantage de méthodes d'enregistrement via le pilote. 🎜🎜La méthode d'enregistrement est configurée par le paramètre LOG_TYPE, par exemple : 🎜
'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误
🎜🎜Enregistrement en mode fichier, le fichier du pilote correspondant se trouve dans la Bibliothèque/Think/Log/Driver/File.class.php du système. code>. 🎜🎜🎜Enregistrement manuel🎜🎜Généralement, la journalisation du système est automatique et il n'est pas nécessaire d'enregistrer manuellement. Cependant, il est parfois également nécessaire d'enregistrer manuellement les informations du journal. La classe Log propose 3 méthodes pour enregistrer les journaux. 🎜🎜🎜🎜🎜Méthode🎜🎜Description🎜🎜🎜🎜🎜🎜Log::record()🎜🎜Enregistrer les informations du journal en mémoire🎜🎜🎜🎜Log::save()🎜🎜Enregistrer les informations du journal enregistrées en mémoire (utilisez Spécifié méthode d'enregistrement) write🎜🎜🎜🎜Log::write()🎜🎜Écrire un message de journal en temps réel🎜🎜🎜🎜<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方法来查看数据库返回的具体错误信息。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer