Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Fehlerbehandlung und Protokollierung

PHP-Fehlerbehandlung und Protokollierung

伊谢尔伦
伊谢尔伦Original
2016-11-22 09:52:291285Durchsuche

Einführung

PHP bietet Fehlerbehandlungs- und Protokollierungsfunktionen, mit denen Sie Ihre eigenen Fehlerbehandlungsregeln definieren und die Art der Fehlerprotokollierung entsprechend Ihren Anforderungen ändern können Verbessern Sie die Fehlerausgabeinformationen, um den tatsächlichen Anforderungen gerecht zu werden.

Über die Protokollierungsfunktion können Sie Informationen direkt an andere Protokollserver oder an eine bestimmte E-Mail-Adresse (oder über ein Mail-Gateway) oder an den Betrieb senden Systemprotokolle und mehr, sodass Sie die wichtigsten Teile Ihrer Anwendungen und Websites selektiv protokollieren und überwachen können.

Mit der Fehlerberichtsfunktion können Sie den Grad und die Art der Fehlerrückmeldung anpassen. Dies kann eine einfache Aufforderungsmeldung sein oder eine benutzerdefinierte Funktion zum Verarbeiten und Zurückgeben von Informationen verwenden.

Beispiel

Unten sehen wir ein Beispiel für die Verwendung der Fehlerbehandlungsfunktion in PHP. Wir definieren eine Fehlerbehandlungsfunktion, protokollieren Fehlerinformationen in einer Datei (im XML-Format) und senden eine E-Mail an den Entwickler, wenn ein schwerwiegender Logikfehler auftritt.

Beispiel #1 Fehlerhandler im Skript verwenden

<?php
    // 我们将要定义自己的错误处理
    error_reporting(0);
    // 用户自定义错误处理函数
    function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
    {
        // 错误发生的时间
        $dt = date("Y-m-d H:i:s (T)");
        // 定义错误字符串的关联数组
        // 在这里我们只考虑
        // E_WARNING, E_NOTICE, E_USER_ERROR,
        // E_USER_WARNING 和 E_USER_NOTICE
        $errortype = array (
            E_ERROR => &#39;Error&#39;,
            E_WARNING => &#39;Warning&#39;,
            E_PARSE => &#39;Parsing Error&#39;,
            E_NOTICE => &#39;Notice&#39;,
            E_CORE_ERROR => &#39;Core Error&#39;,
            E_CORE_WARNING => &#39;Core Warning&#39;,
            E_COMPILE_ERROR => &#39;Compile Error&#39;,
            E_COMPILE_WARNING => &#39;Compile Warning&#39;,
            E_USER_ERROR => &#39;User Error&#39;,
            E_USER_WARNING => &#39;User Warning&#39;,
            E_USER_NOTICE => &#39;User Notice&#39;,
            E_STRICT => &#39;Runtime Notice&#39;,
            E_RECOVERABLE_ERROR => &#39;Catchable Fatal Error&#39;
        );
        // 设置要保存变量跟踪信息的错误类别
        $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
        $err = "<errorentry>\n";
        $err .= "\t<datetime>" . $dt . "</datetime>\n";
        $err .= "\t<errornum>" . $errno . "</errornum>\n";
        $err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n";
        $err .= "\t<errormsg>" . $errmsg . "</errormsg>\n";
        $err .= "\t<scriptname>" . $filename . "</scriptname>\n";
        $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n";
        if (in_array($errno, $user_errors)) {
            $err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>\n";
        }
        $err .= "</errorentry>\n\n";
        // for testing
        // echo $err;
        // 记录错误信息到错误日志,并在发生关键用户错误时发送电子邮件
        error_log($err, 3, "/usr/local/php4/error.log");
        if ($errno == E_USER_ERROR) {
            mail("phpdev@example.com", "Critical User Error", $err);
        }
    }
    function distance($vect1, $vect2)
    {
        if (!is_array($vect1) || !is_array($vect2)) {
            trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
            return NULL;
        }
        if (count($vect1) != count($vect2)) {
            trigger_error("Vectors need to be of the same size", E_USER_ERROR);
            return NULL;
        }
        for ($i=0; $i<count($vect1); $i++) {
            $c1 = $vect1[$i]; $c2 = $vect2[$i];
            $d = 0.0;
            if (!is_numeric($c1)) {
                trigger_error("Coordinate $i in vector 1 is not a number, 
                    using zero",E_USER_WARNING);
                $c1 = 0.0;
            }
            if (!is_numeric($c2)) {
                trigger_error("Coordinate $i in vector 2 is not a number, 
                    using zero",E_USER_WARNING);
                $c2 = 0.0;
            }
            $d += $c2*$c2 - $c1*$c1;
        }
        return sqrt($d);
    }
    $old_error_handler = set_error_handler("userErrorHandler");
    // 未定义的常量,将产生一个警告
    $t = I_AM_NOT_DEFINED;
    // 定义一些 "载体"
    $a = array(2, 3, "foo");
    $b = array(5.5, 4.3, -1.6);
    $c = array(1, -3);
    // 引发一个用户错误
    $t1 = distance($c, $b) . "\n";
    // 再次引发一个用户错误
    $t2 = distance($b, "i am not an array") . "\n";
    // 引发一个警告
    $t3 = distance($a, $b) . "\n";
?>

Fehlerbehandlungsfunktion

debug_backtrace – Backtrace generieren

debug_print_backtrace – Traceback drucken.

error_get_last – Den zuletzt aufgetretenen Fehler abrufen

error_log – Fehlerinformationen irgendwohin senden

error_reporting – Legen Sie fest, welche Art von PHP-Fehlern gemeldet werden sollen

wiederherstellen_error_handler – Wiederherstellen der vorherigen Fehlerbehandlungsfunktion

restore_Exception_handler – Wiederherstellen der zuvor definierten Ausnahmebehandlungsfunktion.

set_error_handler – Legen Sie eine benutzerdefinierte Fehlerbehandlungsfunktion fest.

set_Exception_handler – Legen Sie eine benutzerdefinierte Ausnahmebehandlungsfunktion fest.

trigger_error – Erzeugt eine Fehler-/Warnungs-/Hinweismeldung auf Benutzerebene

user_error – Alias ​​​​von trigger_error


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
Vorheriger Artikel:Anwendung von JSON in PHPNächster Artikel:Anwendung von JSON in PHP