Maison >développement back-end >tutoriel php >Explication détaillée de la gestion des erreurs en PHP

Explication détaillée de la gestion des erreurs en PHP

WJ
WJavant
2020-06-10 17:29:053594parcourir

Explication détaillée de la gestion des erreurs en PHP

Explication détaillée de la gestion des erreurs PHP

Rapport d'erreurs

L'attribution générale des erreurs dans Programmes PHP Dans les trois domaines suivants :

1. Erreurs de grammaire

Les erreurs de grammaire sont les plus courantes et les plus faciles à corriger. Par exemple : il manque un point-virgule dans le code. Ce type d'erreur empêchera l'exécution du script

2. Erreur d'exécution

Ce genre d'erreur n'empêchera généralement pas l'exécution du script PHP, mais empêchera ce qui est en train de se faire . Génère une erreur, mais le script php continue de s'exécuter

3. Erreur logique

Ce type d'erreur est le plus gênant. Il n'empêche pas le script de s'exécuter ni ne génère un message d'erreur

[注意]若将php.ini配置文件中的display_errors从默认的on设置为off,将不显示任何错误

  在PHP脚本中可调用ini_set()函数,动态设置php.ini配置文件

  ini_set("display_errors","On"); //显示所有错误信息

>

Explication détaillée de la gestion des erreurs en PHP

En fait, les 13 types d'erreurs du tableau peuvent être divisés en 3 catégories : niveau d'attention, niveau d'avertissement et niveau d'erreur. Généralement, pendant le processus de développement, ignorez les erreurs de niveau d'attention

<?php
 getType($a);//未定义变量,注意级别
 echo "1111111111111111<br>";    getType();//未传入参数,警告级别
 echo "222222222222222222222<br>";
 getType3();//函数名错误,错误级别
 echo "333333333333333333333<br>";
 ?>

Explication détaillée de la gestion des erreurs en PHPGestion des erreurs

1 La première méthode de gestion des erreurs consiste à modifier le fichier de configuration.

Explication détaillée de la gestion des erreurs en PHP

Le niveau d'erreur par défaut consiste à inviter tous les niveaux d'erreurs :

Remplacez par pour ne pas provoquer d'erreurs de niveau d'attention. Ensuite, redémarrez le service pour prendre effet

error_reporting = E_ALL Jetez toutes les erreurs inaperçues, la valeur par défaut

Ne prenez en compte que les erreurs d'exécution fatales, les nouvelles erreurs d'analyse et les erreurs principales

Signalez les erreurs, à l'exception des erreurs causées par l'utilisateur Toutes les erreurs sauf error_reporting = E_ALLerror_reporting = E_ALL & ~E_NOTICE

error_reporting = E_ALL & ~E_NOTICEerror_reporting = E_ERROR | E_PARSE | E_CORE_ERROR  error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE) 2. La deuxième méthode de gestion des erreurs consiste à utiliser la fonction de gestion des erreurs

en PHP. Le script peut définir dynamiquement le niveau de rapport d'erreurs via la fonction error_reporting()Explication détaillée de la gestion des erreurs en PHP

<?php
    error_reporting(E_ALL & ~E_NOTICE);
    getType($a);//注意级别
    echo "1111111111111111<br>";
    getType();//警告级别
    echo "222222222222222222222<br>";
    getType3();//错误级别
    echo "333333333333333333333<br>";?>

Gestion personnalisée des erreurs

La personnalisation du traitement des rapports d'erreurs peut être complètement contournée. Standard Fonction de gestion des erreurs PHP, afin que vous puissiez imprimer un rapport d'erreurs dans un format que vous définissez ou modifier l'emplacement d'impression du rapport d'erreurs. Vous pouvez envisager de personnaliser la gestion des erreurs dans les situations suivantes : 1. Notez les informations d'erreur et découvrez. certains problèmes de production en temps opportun. Problèmes dans l'environnement ; 2. Bouclier les erreurs ; 3. Contrôler la sortie des erreurs 4. En tant qu'outil de débogage

Utilisez la fonction set_error_handler() pour définir la gestion des erreurs définie par l'utilisateur ; 🎜>

<?php
    //error_reporting(E_ALL & ~E_NOTICE);
    //在php中注册一个函数来处理错误报告,替代默认的方式
    set_error_handler("myerrorfun");    
    $mess = "";    //自定义错误报告处理函数
    function myerrorfun($error_type, $error_message, $error_file, $error_line) {
        global $mess;        
        $mess.="发生错误级别为{$error_type}类型, 错误消息<b>{$error_message}</b>, 在文件<font >{$error_file}</font>中, 第{$error_line}行。<br>";    
    }    getType($a);    
    echo "1111111111111111<br>";    
    getType();    
    echo "222222222222222222222<br>";    
    echo "--------------------------------------------<br>";    
    echo $mess;
    ?>
Explication détaillée de la gestion des erreurs en PHP

Journal des erreurs

Généralement, les programmes enregistrent les journaux d'erreurs pour enregistrer les informations sur les erreurs lorsque le programme est en cours d'exécution. Et le journal des erreurs a son emplacement de stockage par défaut. Nous pouvons modifier l'emplacement des messages d'erreur et des journaux d'erreurs

Dans le fichier de configuration PHP.ini, il y a les éléments suivants pour définir le journal d'erreurs

//Enverra chaque erreur en PHP

//Ne pas afficher le rapport d'erreurs

//Longueur maximale de chaque entrée de journal

//Spécifiez le fichier dans lequel les erreurs sont écrites

Dans le php, nous pouvons utiliser la fonction error_log() pour personnaliser le message d'erreur error_reporting = E_ALL

<?phperror_log("登录失败了!");?>
display_errors=Offlog_errors=On            //决定日志语句记录的位置log_errors_max_log=1024error_log=G:/myerror.logGestion des exceptions

La gestion des exceptions (Exception) est utilisée dans le spécifié Changer le flux normal d'un script lorsqu'une erreur se produit est une nouvelle fonctionnalité importante de PHP5. La gestion des exceptions est un mécanisme de gestion des erreurs évolutif et facile à maintenir, et fournit une nouvelle méthode de gestion des erreurs orientée objet

try{  
   使用try去包含可能会发生异常的代码
   一旦出现异常try进行捕获异常,交给catch处理。
   抛出异常语句:throw 异常对象。
}catch(异常对象参数){
   在这里做异常处理。
}[catch(。,,){
   .. .. ..
}]

<?php
    try {        $error = &#39;Always throw this error&#39;;        throw new Exception($error);   
        //创建一个异常对象,通过throw语句抛出
        echo &#39;Never executed&#39;;         
        //从这里开始,try代码块内的代码将不会再被执行
    } catch (Exception $e) {        echo ‘Caught exception: ’.$e->getMessage()."
"; //输出捕获的异常消息
    }    echo &#39;Hello World&#39;; //程序没有崩溃继续向下执行?>

 

自定义异常

  用户可以用自定义的异常处理类来扩展PHP内置的异常处理类。以下的代码说明了在内置的异常处理类中,哪些属性和方法在子类中是可访问和可继承的

<?phpclass Exception{
    protected $message = &#39;Unknown exception&#39;;   // 异常信息
    private   $string;                          // __toString cache
    protected $code = 0;                        // 用户自定义异常代码
    protected $file;                            // 发生异常的文件名
    protected $line;                            // 发生异常的代码行号
    private   $trace;                           // backtrace
    private   $previous;                        // previous exception if nested exception
    public function __construct($message = null, $code = 0, Exception $previous = null);
    final private function __clone();           // Inhibits cloning of exceptions.
    final public  function getMessage();        // 返回异常信息
    final public  function getCode();           // 返回异常代码
    final public  function getFile();           // 返回发生异常的文件名
    final public  function getLine();           // 返回发生异常的代码行号
    final public  function getTrace();          // backtrace() 数组
    final public  function getPrevious();       // 之前的 exception
    final public  function getTraceAsString();  // 已格成化成字符串的 getTrace() 信息
    // Overrideable
    public function __toString();               // 可输出的字符串}?>

  [注意]如果使用自定义的类来扩展内置异常处理类,并且要重新定义构造函数的话,建议同时调用parent::__construct()来检查所有的变量是否已被赋值。当对象要输出字符串的时候,可以重载__toString() 并自定义输出的样式

<?php
    /* 自定义的一个异常处理类,但必须是扩展内异常处理类的子类 */
    class MyException extends Exception{
        //重定义构造器使第一个参数 message 变为必须被指定的属性
        public function __construct($message, $code=0){
            //可以在这里定义一些自己的代码
         //建议同时调用 parent::construct()来检查所有的变量是否已被赋值
            parent::__construct($message, $code);
        }    
        public function __toString() {        
          //重写父类方法,自定义字符串输出的样式
          return __CLASS__.":[".$this->code."]:".$this->message."<br>";
        }        public function customFunction() {    
             //为这个异常自定义一个处理方法
             echo "按自定义的方法处理出现的这个类型的异常<br>";
        }
    }?>
<?php
   try { //使用自定义的异常类捕获一个异常,并处理异常
        $error = &#39;允许抛出这个错误&#39;;       
        throw new MyException($error);    
             //创建一个自定义的异常类对象,通过throw语句抛出
        echo &#39;Never executed&#39;; 
            //从这里开始,try代码块内的代码将不会再被执行
    } catch (MyException $e) {        //捕获自定义的异常对象
        echo &#39;捕获异常: &#39;.$e;        //输出捕获的异常消息
        $e->customFunction();  //通过自定义的异常对象中的方法处理异常
    }    echo &#39;你好呀&#39;;              //程序没有崩溃继续向下执行?>

相关参考:php教程

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