Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Verwendung der PHP-Funktion set_error_handler()

Detaillierte Erläuterung der Verwendung der PHP-Funktion set_error_handler()

怪我咯
怪我咯Original
2017-07-10 14:53:191258Durchsuche

Die Funktion

set_error_handler() legt eine benutzerdefinierte Fehlerbehandlungsfunktion fest.

Hinweis: Wenn diese Funktion verwendet wird, wird der Standard-PHP-Fehlerhandler umgangen und der benutzerdefinierte Fehlerhandler beendet das Skript bei Bedarf über die().

Hinweis: Wenn der Fehler auftritt, bevor das Skript ausgeführt wird (z. B. wenn eine Datei hochgeladen wird), wird der benutzerdefinierte Fehlerhandler nicht aufgerufen, da er zu diesem Zeitpunkt noch nicht registriert wurde.

Syntax

set_error_handler(errorhandler,E_ALL|E_STRICT);
参数 描述
errorhandler 必需。规定用户错误处理函数的名称。
E_ALL|E_STRICT 可选。规定显示何种错误报告级别的用户定义错误。默认是 "E_ALL"。

Die Verwendung von set_error_handler ist wie folgt:

string set_error_handler ( callback error_handler [, int error_types])

Jetzt verwenden wir eine benutzerdefinierte Fehlerbehandlung, um den tatsächlichen Pfad herauszufiltern. Angenommen, es gibt eine Variable $admin, mit der wir bestimmen, ob der Besucher ein Administrator ist (diese Bestimmung kann anhand der IP-Adresse oder der angemeldeten Benutzer-ID erfolgen).

//admin为管理员的身份判定,true为管理员。  
//自定义的错误处理函数一定要有这4个输入变量$errno,$errstr,$errfile,$errline,否则无效。  
function my_error_handler($errno,$errstr,$errfile,$errline)  
{  
    //如果不是管理员就过滤实际路径  
    if(!admin)  
    {  
        $errfile=str_replace(getcwd(),"",$errfile);  
        $errstr=str_replace(getcwd(),"",$errstr);  
    }  
    switch($errno)  
    {  
        case E_ERROR:  
        echo "ERROR: [ID $errno] $errstr (Line: $errline of $errfile) \n";  
        echo "程序已经停止运行,请联系管理员。";  
        //遇到Error级错误时退出脚本  
        exit;  
        break;  

        case E_WARNING:  
        echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile) \n";  
        break;  

        default:  
        //不显示Notice级的错误  
        break;  
    }  
}

Auf diese Weise wird eine Fehlerbehandlung angepasst Funktion, wie übergebe ich dann die Fehlerbehandlung an diese benutzerdefinierte Funktion?

// 应用到类  
set_error_handler(array(&$this,"appError"));  

//示例的做法  
set_error_handler("my_error_handler");

So einfach, auf diese Weise kann der Widerspruch zwischen Sicherheit und Debugging-Komfort gut gelöst werden. Und Sie können auch darüber nachdenken, die Fehlermeldung schöner zu gestalten, damit sie zum Stil der Website passt.
Der ursprüngliche Autor hat zwei Punkte genannt, die Aufmerksamkeit erfordern. Ich werde sie hier veröffentlichen, in der Hoffnung, die Aufmerksamkeit unserer Landsleute zu erregen:
1 Dies Das Handle wird verarbeitet, das heißt, es wird auf die originellste Weise angezeigt. Diese Fehler werden jedoch durch Kompilierungs- oder PHP-Kernelfehler verursacht und treten unter normalen Umständen nicht auf.
2. Nach der Verwendung von set_error_handler() ist error_reporting () ungültig. Das heißt, alle Fehler (mit Ausnahme der oben genannten Fehler) werden zur Verarbeitung an die benutzerdefinierte Funktion übergeben.
Geben Sie abschließend ein Beispiel

//先定义一个函数,也可以定义在其他的文件中,再用require()调用  
function myErrorHandler($errno, $errstr, $errfile, $errline)  
{  
     //为了安全起见,不暴露出真实物理路径,下面两行过滤实际路径  
    $errfile=str_replace(getcwd(),"",$errfile);  
    $errstr=str_replace(getcwd(),"",$errstr);  

    switch ($errno) {  
    case E_USER_ERROR:  

     echo "<b>My ERROR</b> [$errno] $errstr<br />\n";  
        echo "  Fatal error on line $errline in file $errfile";  
        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";  
        echo "Aborting...<br />\n";  
        exit(1);  
        break;  

    case E_USER_WARNING:  
        echo "<b>My WARNING</b> [$errno] $errstr<br />\n";  
        break;  

    case E_USER_NOTICE:  
        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";  
        break;  

    default:  
        echo "Unknown error type: [$errno] $errstr<br />\n";  
        break;  
    }  

    /* Don&#39;t execute PHP internal error handler */  
    return true;  
}  

//下面开始连接MYSQL服务器,我们故意指定MYSQL端口为3333,实际为3306。  
$link_id=@mysql_pconnect("localhost:3333","root","password");  
set_error_handler(myErrorHandler);  
if (!$link_id) {  
    trigger_error("出错了", E_USER_ERROR);  
}

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der PHP-Funktion set_error_handler(). 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