Zusammenfassung der PHP-Fehler und Ausnahmen
Fehler
Fehlerstufe
Schwerwiegender Fehler: Schwerwiegender Fehler (Skript beendet Ausführung)
E_ERROR Schwerwiegender Laufzeitfehler, bricht Programmausführung ab
E_CORE_ERROR Schwerwiegender Fehler, wenn PHP wird gestartet
E_COMPILE_ERROR Schwerwiegender Fehler beim Kompilieren von PHP
E_USER_ERROR Schwerwiegender Fehler, der von Benutzern generiert wurde
Analysefehler: Analysefehler während der Kompilierung (Skript wird ausgeführt)
Analysefehlersyntax Analysefehler während der Kompilierung
Warnungsfehler: Warnfehler (es werden nur Eingabeaufforderungsinformationen bereitgestellt, aber das Skript beendet den Vorgang nicht.)
E_WARNING Laufzeitwarnung (nicht schwerwiegender Fehler) .
E_CORE_WARNING Warnung (nicht schwerwiegender Fehler), die während des PHP-Initialisierungsstarts auftritt.
E_COMPILE_WARNING Kompilierungswarnung
E_USER_WARNING Vom Benutzer generierte Warnmeldung
Hinweisfehler: Benachrichtigungsfehler (es werden nur Benachrichtigungsinformationen angegeben, aber das Skript beendet den Vorgang nicht.)
E_NOTICE Laufzeitbenachrichtigung. Zeigt an, dass das Skript auf eine Situation stößt, die als Fehler angezeigt werden kann.
E_USER_NOTICE Vom Benutzer generierte Benachrichtigungsinformationen.
set_error_handler() erfasst Fehler [mit Einschränkungen]
Funktionsbeschreibung
set_error_handler($callback);//Legen Sie eine Benutzerfunktion (error_handler) fest, um An zu behandeln Im Skript ist ein Fehler aufgetreten.
Einschränkungen von Funktionen
Die folgenden Fehlerstufen können nicht von benutzerdefinierten Funktionen behandelt werden: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING und beim Aufruf von set_error_handler() Die meisten E_STRICTs werden in der Datei generiert, in der sich die Funktion befindet.
Das heißt: set_error_handler($callback) kann nur einige vom System generierte Fehler der Warn- und Hinweisebene erfassen.
Verwendungsmethode
<?phpset_error_handler("error_handler");function error_handler($errno,$errstr,$errfile,$errline){ $str=<<<EOF "errno":$errno "errstr":$errstr "errfile":$errfile "errline":$errlineEOF; //获取到错误可以自己处理,比如记Log、报警等等 echo $str; }echo $test;//$test未定义,会报一个notice级别的错误
Ausgabeergebnis:
"errno":8"errstr":Undefined variable: test"errfile":/Users/shuchao/Desktop/handler.php"errline":13 如何捕获PHP的Fatal Error、Parse Error等
Anforderungsbeschreibung
Erhalten Sie den schwerwiegenden Fehler von PHP, z. B. die Aufzeichnung im Protokoll, das hilfreich ist. Wir analysieren Online-Probleme und können Online-Dienste überwachen.
Zwei Funktionen
register_shutdown_function()
register_shutdown_function($callback)
register_shutdown_function(), nur die Funktion, die Sie registrieren möchten Warten Sie in [so tun, als wäre es eine Warteschlange], bis das Skript normal beendet wird oder den Aufruf zum Beenden anzeigt, und ziehen Sie dann die registrierte Funktion zur Ausführung heraus
Drei Situationen, in denen register_shutdown_function() aufgerufen wird:
Wenn das Skript normal beendet wird;
Wenn das Skript mit einem Fehler beendet wird (Laufzeit, nicht Analysezeit);
Wenn der Benutzer die Exit-Methode zum Beenden aufruft.
error_get_last()
error_get_last(); // Funktion ruft den letzten aufgetretenen Fehler ab.
Diese Funktion gibt den zuletzt aufgetretenen Fehler in Form eines Arrays zurück.
Das zurückgegebene Array enthält 4 Schlüssel und Werte:
[Typ] – Fehlertyp
[Nachricht] – Fehlermeldung
[Datei] – Datei, in der der Fehler aufgetreten ist
[Zeile] – Die Zeile, in der der Fehler aufgetreten ist
Verwendungsmethode
<?php register_shutdown_function( "fatal_handler" ); define('E_FATAL', E_ERROR | E_USER_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_RECOVERABLE_ERROR| E_PARSE );function fatal_handler() { if( $error = error_get_last()) { $errno = $error["type"]; $errfile = $error["file"]; $errline = $error["line"]; $errstr = $error["message"]; $str=<<<EOF "errno":$errno "errstr":$errstr "errfile":$errfile "errline":$errlineEOF; //获取到错误可以自己处理,比如记Log、报警等等 echo $str; } }
Beachten Sie unbedingt, dass
register_shutdown_function( nicht aufgerufen wird, wenn ein Parse-Zeitfehler auftritt) Funktion. Register_shutdown_function() wird nur aufgerufen, wenn ein Laufzeitfehler auftritt.
Geben wir unten ein Beispiel:
NO.1
error_handler.php
<?phpregister_shutdown_function("error_handler");function error_handler(){ echo "Yeah,it's worked!"; }function test(){}function test(){}
Die Ausführungsergebnisse sind wie folgt:
Schwerwiegender Fehler: test() (zuvor in /Users/shuchao/Desktop/error_handler.php:6 deklariert) in/Users/shuchao/Desktop/error_handler.php in Zeile 7 kann nicht erneut deklariert werden
Ursachenanalyse
Beim Ausführen von error_handler.php tritt in der Analysezeit von PHP (nicht zur Laufzeit) ein Fehler auf, da zwei Funktionen test() wiederholt definiert werden, sodass die Funktion in register_shutdown_function() nicht ausgeführt werden kann rief zurück.
NO.2
error_handler.php
<?phpregister_shutdown_function("error_handler");function error_handler(){ echo "Yeah,it's worked!"; }if(true){ function test(){} }function test(){}
Die Ausführungsergebnisse sind wie folgt:
Fatal error: Cannot redeclare test() (previously declared in /Users/shuchao/Desktop/error_handler.php:9) in /Users/shuchao/Desktop/error_handler.php on line 7Yeah,it's worked!%
Ursachenanalyse
我们看到,上面回调了register_shutdown_function().
因为我们加了一个if()判断,if()里面的test()方法,相当于一个闭包,与外面的test()名称不冲突。
也就是,上面的代码在parse-time没有出错,而是在run-time的时候出错了,所以我们能够获取到fatal error。
NO.3
error_handler.php
<?phpregister_shutdown_function("error_handler");function error_handler(){ echo "Yeah,it's worked!";} test_error.php <?phpinclude './error_handler.php';function test(){}function test(){}
执行 test_error.php的结果如下
Fatal error: Cannot redeclare test() (previously declared in /Users/shuchao/Desktop/test_error.php:3) in/Users/shuchao/Desktop/test_error.php on line 4
原因分析
当我们在运行test_error.php的时候,因为redeclare了两个test()方法,所以php的语法解析器在parse-time的时候就出错了。 所以不能回调register_shutdown_function()中的方法,不能catch住这个fatal error。
NO.4
error_handler.php <?phpregister_shutdown_function("error_handler");function error_handler(){ echo "Yeah,it's worked!";} test_error.php <?phpfunction test(){}function test(){} include_all.php require './error_handler.php';require './test_error.php';
执行 include_all.php的结果如下
Fatal error: Cannot redeclare test() (previously declared in /Users/shuchao/Desktop/include_all.php:2) in /Users/shuchao/Desktop/include_all.php on line 3Yeah,it's worked!%
结果分析
上面我们捕获了fatal_error.因为在运行include_all.php的时候,include_all.php本身语法并没有出错,也就是在parse-time的时候并没有出错,而是include的文件出错了,也就是在run-time的时候出错了,这个时候是能回调register_shutdown_function()中的函数的。
强烈建议:如果我们要使用register_shutdown_function进行错误捕捉,使用NO.4,最后一种方法,可以确保错误都能捕捉到。
更优美的写法·获取所有错误
set_error_handler()与register_shutdown_function()、error_get_last()的结合使用 <?phpregister_shutdown_function( "fatal_handler" );set_error_handler("error_handler");define('E_FATAL', E_ERROR | E_USER_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_RECOVERABLE_ERROR| E_PARSE );//获取fatal errorfunction fatal_handler() { $error = error_get_last(); if($error && ($error["type"]===($error["type"] & E_FATAL))) { $errno = $error["type"]; $errfile = $error["file"]; $errline = $error["line"]; $errstr = $error["message"]; error_handler($errno,$errstr,$errfile,$errline); }}//获取所有的errorfunction error_handler($errno,$errstr,$errfile,$errline){ $str=<<<EOF "errno":$errno "errstr":$errstr "errfile":$errfile "errline":$errlineEOF;//获取到错误可以自己处理,比如记Log、报警等等 echo $str;} Exception Exception与Error的区别 Exception
当异常抛出的时候,我们是想要去捕获他,并去做处理的。所以异常经常被当做程序的控制流程使用。
Error
Error是不可恢复的,是在开发过程中要去解决的。
使用Exception的例子
我想执行insert语句插入一条数据,可能插入失败(比如ID重复),注意是可能失败,所以这是一个可能的情况,也就是异常情况。我们就可以使用异常来处理这个问题
try { $row->insert(); $inserted = true; } catch (Exception $e) { echo "There was an error inserting the row - ".$e->getMessage(); $inserted = false; }echo "Some more stuff";
如何catch一个未捕获的Exception
场景描述
假设程序中的有些地方直接throw了异常,没有进行catch。我们现在想要不管在程序的任何一个地方throw异常,即便在throw的地方没有被catch,我们也要能catch住,如何做到呢?
一个函数:set_exception_handler()
//设置默认的异常处理程序,用于没有用 try/catch 块来捕获的异常。 在 exception_handler 调用后异常会中止。
set_exception_handler()
使用示例
1、exception_handler.php <?phpset_exception_handler("my_exception");function my_exception($exception){ echo $exception->getMessage();} 2、test_exception.php <?phprequire "./exception_handler.php";throw new Exception("I am Exception");
现在我们运行 test_exception.php,结果如下:
I am Exception //证明我们throw的Exception被捕获了

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
