Maison >développement back-end >tutoriel php >Erreurs et exceptions rencontrées par les programmeurs PHP Erreurs de la partie 1
Le contenu de cet article concerne les erreurs et exceptions rencontrées par les programmeurs PHP. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
L'erreur de niveau le plus bas (obsolète), non recommandée, comme le remplacement de l'ancienne version de la fonction Depracated
standard C'est cela, cela n'affecte pas l'exécution de PHP) ereg()
Erreur de niveau de notification (causée par une syntaxe incorrecte, n'affecte pas le fonctionnement normal de PHP, comme l'impression d'une variable non définie , il faut donc développer de bonnes pratiques d'écriture dès le début) Notice
Niveau d'avertissement erreurs (le code doit être modifié) Warning
Erreurs de niveau fatales, Fatal error
程序会停止
Erreurs d'analyse de syntaxe, vérifiez avant d'exécuter le code, Parse error
将无法执行代码
Erreurs définies par l'utilisateur, utilisées lors du lancement manuel des erreurs E_USER_相关的错误
error_reporting=E_ALL & ~E_NOTICE # 显示所有但不显示提醒错误 display_errors = Off|On # 是否显示错误,线上后关闭提高用户体验1.3.2 Paramètres dynamiques
error_reporting() # 专业php错误处理设置函数,动态设置错误级别 error_reporting(0) # 不显示所有错误,但是解析parse语法错误会显示 error_reporting(-1) # 显示所有错误 Error_reporting(E_ALL|~E_WARING) # 除了警告错误以外的错误级别都报告1.3.3 Définir la valeur des options de configuration au moment de l'exécution
ini_set(option,value) ini_set(error_reporting,0) ini_set(error_reporting,-1) ini_set(error_reporting,E_ALL) ini_set(display_errors,0) ini_set(display_errors,OFF/0) error_reporting(-1);14 . trigger_error déclenche manuellement un suppresseur d'erreur
, placé en début de ligne pour ne pas afficher les erreurs dans la ligne @
trigger_error('错误提示内容',E_USER_NOTICE)
Niveau d'erreur :
E_USER_NOTICE # 继续执行(通知级别) E_USER_WARNING # 继续执行(警告错误) E_USER_ERROR # 程序不再执行(致命错误)2. Gestion des erreurs en PHP 2.1 Enregistrez le journal des erreurs dans le fichier spécifié
ini_set('display_errors','off') # 不显示错误给用户 ini_set("error_log","c:\error.log"); error_reporting(-1); # 显示所有错误2.2 Enregistrez le journal des erreurs dans le journal système
ini_set("error_log", 'syslog')2.3 Envoyez le journal des erreurs par e-mail
error_log("this is a errormsg",1,xxxxx@qq.com);3. Gestionnaire d'erreurs personnalisé3.1 set_error_handler Gestion des erreurs personnalisée
set_error_handler("自定义函数名",'错误级别(选填)') # 设置一个用户定义的错误处理函数 restore_error_handler(); # 回收(取消自定义错误函数接管php系统错误)
3.2 Gestion des erreurs personnalisée
class MyErrorHandler{ //错误信息 public $message = ''; //错误文件 public $filename = ''; //错误行号 public $line = 0; //额外信息 public $vars = array(); protected $_noticelog = 'G:\notice\noticeLog.log'; public function __construct($message, $filename, $line, $vars) { $this->message = $message; $this->filename = $filename; $this->line = $line; $this->vars = $vars; } //根据不同错误级别对应不同操作 //遵循handler错误处理原则,errno:错误代码,line:错误行号 public static function deal($errno,$errmsg,$filename,$line,$vars) { $self = new self($errmsg,$filename,$line,$vars); switch ($errno) { case E_USER_ERROR://致命级别 return $self->dealError(); break; case E_USER_WARNING://警告级别 case E_WARNING: return $self->dealWarning(); break; case E_NOTICE://通知级别 case E_USER_NOTICE: return $self->dealNotice(); break; default: return false; } } /** * 如何处理致命错误 */ public function dealError() { //开启内存缓冲 ob_start(); //回溯上一条信息 debug_print_backtrace(); $backtrace = ob_get_flush(); $errorMsg = <<<EOF 出现了致命错误,如下: 产生错误的文件:{$this->filename} 产生错误的信息:{$this->message} 产生错误的行号:{$this->line} 追踪信息:{$backtrace} EOF; // error_log($errorMsg,1,'xxxx@qq.com'); error_log($errorMsg,3,$this->_noticelog); exit(1); } /** * 如何处理警告错误 */ public function dealWarning() { $errorMsg = <<<EOF 出现了警告错误,如下: 产生警告的文件:{$this->filename} 产生警告的信息:{$this->message} 产生警告的行号:{$this->line} EOF; // return error_log($errorMsg,1,'xxx@qq.com'); return error_log($errorMsg,3,$this->_noticelog); } /** * 如何处理通知错误 */ public function dealNotice() { $datetime = date('Y-m-d H:i:s',time()); $errorMsg = <<<EOF 出现了通知错误,如下: 产生通知的文件:{$this->filename} 产生通知的信息:{$this->message} 产生通知的行号:{$this->line} 产生通知的时间:{$datetime} EOF; return error_log($errorMsg,3,$this->_noticelog); } }3.3 Test du gestionnaire d'erreurs
require_once 'MyErrorHandler.php'; error_reporting(-1); //使用MyErrorHandler类直接调用deal方法 /** * set_error_handler(array(类名/new 类名,方法名)); * set_error_handler(函数名); */ set_error_handler(array('MyErrorHandler','deal')); //通知级别错误 echo $test; //警告级别错误 settype($var,'king'); //致命错误 //test(); //总结:手动抛出的信息会被显示在浏览器 trigger_error('我是手动抛出的致命错误',E_USER_ERROR); echo 'this is a test ';3.4 Utilisation de la fonction register_shutdown_function
Scénarios d'utilisation :
La fonction est register_shutdown_function()
从内存中调用
, c'est-à-dire après l'exécution de l'instruction PHP (la page n'existe plus), Cette fonction est appelée, donc lors de l'écriture du chemin, elle est déjà hors du script, donc file_put_contents()
路径要用绝对路径
error_get_last # 得到最后产生的错误
Remarque : Si dans S'il y a register_shutdown_function()
avant, il ne sera pas exécuté die/exit
n'est pas terminé ! A suivre dans le prochain article : 那些年,PHPer遇到的错误与异常:下篇之异常
Vidéo du cours de référence : Erreurs et exceptions que vous avez rencontrées au cours de ces années
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!