Heim > Artikel > Backend-Entwicklung > PHP-Instanzmethoden zur Fehlerbehandlung
In PHP ist die Standardfehlerbehandlung sehr einfach. An den Browser wird eine Nachricht mit dem Dateinamen, der Zeilennummer und einer Fehlerbeschreibung gesendet. Die Fehlerbehandlung ist ein wichtiger Bestandteil bei der Erstellung von Skripten und Webanwendungen. Wenn Ihr Code keine Fehlererkennungscodierung aufweist, sieht das Programm unprofessionell aus und birgt Sicherheitsrisiken.
1. Einfache „die()“-Anweisung
2. error_reporting();
3. Benutzerdefinierte Fehler und Fehlerauslöser
3. PHP-Fehlerstufe:
1 E_ERROR Schwerwiegender Laufzeitfehler. Der Fehler kann nicht behoben werden. Die Ausführung des Skripts wurde ausgesetzt
2 E_WARNING Nicht schwerwiegender Laufzeitfehler. Die Ausführung des Skripts wird nicht gestoppt
4 E_PARSE Fehler beim Parsen der Kompilierungszeit. Parsing-Fehler sollten nur vom Parser
8 E_NOTICE-Laufzeitbenachrichtigungen generiert werden.
16 E_CORE_ERROR Schwerwiegender Fehler beim Starten von PHP. Dies ist wie ein E_ERROR
32 im PHP-Kern. E_CORE_WARNING Ein nicht schwerwiegender Fehler beim Start von PHP. Dies ist wie eine PHP-Kern-E_WARNING-Warnung
64 E_COMPILE_ERROR schwerwiegender Fehler bei der Kompilierung. Dies ähnelt einem nicht schwerwiegenden Fehler E_ERROR
128 E_COMPILE_WARNING zur Kompilierungszeit, der von der Zend Scripting Engine generiert wird, und einer Warnung E_WARNING
256 E_USER_ERROR einem schwerwiegenden benutzergenerierten Fehler, der von der Zend Scripting Engine generiert wird .
512 E_USER_WARNING Nicht schwerwiegende, vom Benutzer generierte Warnung.
1024 E_USER_NOTICE Benutzergenerierte Benachrichtigung.
2048 E_STRICT Aktiviert PHPs Vorschläge für Codeänderungen, um die beste Interoperabilität und Vorwärtskompatibilität des Codes sicherzustellen.
4096 E_RECOVERABLE_ERROR Fängt schwerwiegende Fehler ab.
8191 E_ALL Alle Fehler und Warnungen.
4. PHP-Fehlerberichterstattung:
PHP aktiviert standardmäßig keine Fehlerberichterstattung. Es gibt zwei Möglichkeiten, Fehler anzuzeigen:
1. Konfigurieren Sie die php.ini-Datei.
Ändern Sie display_errors =Off in display_errors = On
PHP zeigt standardmäßig alle Fehler an, aber wir müssen einige harmlose Eingabeaufforderungen nicht anzeigen. Darüber hinaus müssen wir auch die Fehlerstufe konfigurieren: error_reporting = E_ALL Änderung zu: error_reporting= E_ALL & ~E_NOTICE
Noch etwas: Fehlerecho wird im Allgemeinen im Entwicklungsmodus verwendet, aber Fehlerecho kann viele vertrauliche Informationen preisgeben, was den nächsten Angriff des Angreifers erleichtert. In einer formalen Umgebung wird empfohlen, diese Option zu deaktivieren und log_error=on festzulegen. Wenn zu diesem Zeitpunkt ein Fehler auftritt, wird Folgendes angezeigt: Serverfehler, es wird jedoch keine Fehleraufforderung angezeigt und die Fehlerinformationen werden im Protokoll aufgezeichnet .
2. Hinzufügen von
<?php error_reporting(0); // 关闭错误报告 error_reporting(E_ERROR | E_WARNING | E_PARSE); // 报告 runtime 错误 error_reporting(E_ALL); // 报告所有错误 error_reporting(E_ALL & ~E_NOTICE); // 报告 E_NOTICE 之外的所有错误 ?>
5. Benutzerdefinierter Fehlerhandler und Fehlerauslöser
user_error_function(error_level,error_message,error_file,error_line,error_context)(用户自己定义,用在set_error_handler中调用)
error_level: erforderlich (Fehler). Ebene)
error_message: erforderlich (benutzerdefinierte Fehlermeldung), Zeilennummer und andere Informationen)
set_error_handler():
set_error_handler() erfordert nur einen Parameter (benutzerdefinierter Fehlerhandler), und ein zweiter Parameter kann hinzugefügt werden, um die Fehlerstufe anzugeben.
在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。可以在脚本中任何位置触发错误,通过添加的第二个参数,您能够规定所触发的错误级别。可能的错误类型:E_USER_ERROR, E_USER_WARNING, E_USER_NOTIC.
例子:
//自定义错误处理器 function myErrorHandler($errno, $errstr, $errfile,$errline){ if(!(error_reporting() &$errno)){return;} switch ($errno){ case E_USER_ERROR: echo "<b>MyERROR</b> [$errno] $errstr<br/>"; echo "错误行:$errline 在文件:$errfile之中<br/>"; echo " PHP版本: " .PHP_VERSION ." (" .PHP_OS .")<br/>"; break; case E_USER_WARNING: echo "<b>MyWARNING</b> [$errno] $errstr<br/>"; break; case E_USER_NOTICE: echo "<b>MyNOTICE</b> [$errno] $errstr<br />"; break; default: echo "Unknown error type:[$errno] $errstr<br />"; break; } return true; } //测试函数 functiontrigger_test($age){ if($age <= 0|| $age > 999) trigger_error("年龄不合法:$age岁",E_USER_ERROR); if($age < 18) trigger_error("未成年:$age岁",E_USER_WARNING); if($age > 40&& $age < 100) trigger_error("年龄稍大:$age岁",E_USER_NOTICE); } //如果只是简单统一地处理错误: $errorHandler = set_error_handler("myErrorHandler"); trigger_test(1000);//会抛出一个error级的错误 //如果要分别处理不同错误级别则需要构造不同级别的错误处理器 function myError($errno, $errstr,$errfile, $errline){ //具体处理方法 } function myWarning($errno, $errstr, $errfile, $errline){ //具体处理方法 } function myNtice($errno, $errstr, $errfile, $errline){ //具体处理方法 } set_error_handler('myError',E_USER_ERROR); set_exception_handler('myWarning',E_USER_WARNING); set_exception_handler('myNtice',E_USER_NOTICE); trigger_error('故意抛出个错误,还是很严重的哪一种!',E_USER_ERROR);
在有可能出错的函数前加@,然后or die("")
如: @mysql_connect(...) or die("Database Connect Error")
注:@其实它是错误抑制符,即即使出现错误,也无视出现的错误信息,继续执行下边的代码;好处是不会输出错误信息。
Or die当在脚本中调用die()和exit()时,将会终止整个脚本。它们都可用于阻止脚本继续执行,而使得某些重要的操作(如建立一条数据库连接)不会发生。你还可以给die()和exit()传递一个将在浏览器中打印出来的字符串。
编辑php.ini ,将"display_errors =off" , 同时将log_error=on, error_log = /var/log/php-error.log
在php脚本前加error_reporting(0),屏蔽所有错误提示。
其中,error_reporting 配置错误信息回报的等级。
语法:int error_reporting(int [level]);
返回值:整数
函数种类:PHP 系统功能
相关推荐:
Das obige ist der detaillierte Inhalt vonPHP-Instanzmethoden zur Fehlerbehandlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!