Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Instanzmethoden zur Fehlerbehandlung

PHP-Instanzmethoden zur Fehlerbehandlung

小云云
小云云Original
2018-03-15 11:36:181746Durchsuche

1. PHP-Standardfehlerbehandlungsmethode

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.

2. Verbesserte Verarbeitungsmethode:

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

Benutzerdefinierter Fehlerhandler:
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():

Wenn diese Funktion verwendet wird, wird das Standard-PHP verwendet Die Fehlerbehandlungsfunktion wird vollständig umgangen (error_reporting () ist ungültig. Falls erforderlich, muss der benutzerdefinierte Fehlerhandler das Skript beenden (die()).

set_error_handler() erfordert nur einen Parameter (benutzerdefinierter Fehlerhandler), und ein zweiter Parameter kann hinzugefügt werden, um die Fehlerstufe anzugeben.

trigger_error()触发错误

在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。可以在脚本中任何位置触发错误,通过添加的第二个参数,您能够规定所触发的错误级别。可能的错误类型: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(&#39;myError&#39;,E_USER_ERROR);
set_exception_handler(&#39;myWarning&#39;,E_USER_WARNING);
set_exception_handler(&#39;myNtice&#39;,E_USER_NOTICE);
trigger_error(&#39;故意抛出个错误,还是很严重的哪一种!&#39;,E_USER_ERROR);

6. 屏蔽PHP错误提示

方法一:

在有可能出错的函数前加@,然后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 系统功能

相关推荐:

PHP错误处理方法实例

php错误处理和日志记录

PHP错误处理方法总结_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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn