Heim >Backend-Entwicklung >PHP-Tutorial >Probleme bei der PHP-Fehlerbehandlung
PHPs Fehlerbehandlung ist relativ kompliziert. In diesem Artikel werden alle wichtigen Wissenspunkte im Zusammenhang mit Fehlern in PHP erläutert, um das Verständnis des PHP-Fehlermechanismus zu erleichtern.
Machen Sie sich vorher mit den Grundkenntnissen von PHP-Fehlern vertraut
Vordefinierte Konstanten
Laufzeitkonfiguration
Ausnahme
Fehlerbehandlungsfunktion
Definiert alle PHP-Fehlertypen Konstanten. Jede Konstante ist ein ganzzahliger Wert (numerischer Wert oder Symbol) oben
wird verwendet, um eine binäre Bitmaske zu erstellen, um die zu meldende Fehlermeldung anzugeben. Sie können bitweise Operatoren verwenden, um diese Werte zu kombinieren oder bestimmte Fehlertypen zu maskieren. Bitte beachten Sie, dass in php.ini nur „|“, „~“, „!“, „^“ und „&“ korrekt geparst werden.
Aus Sicht der Verwendung kann es in drei Kategorien unterteilt werden:
manuell vom Benutzer ausgelöstE_USER_NOTICE
, E_USER_WARNING
, E_USER_ERROR
, E_USER_DEPRECATED
Benutzer verursachtE_NOTICE
, E_PARSE
, E_WARNING
, E_ERROR
, E_COMPILE_ERROR
, E_COMPILE_WARNING
, E_STRICT
, E_RECOVERABLE_ERROR
verursacht durch den PHP-KernelE_CORE_ERROR
, E_CORE_WARNING
aus der Perspektive, ob um die Programmausführung zu beenden Schauen Sie, es kann in zwei Kategorien unterteilt werden
Programmausführung beenden
Das Programm wird beendet und tritt in den Fehlerbehandlungsprozess ein
Beendet die Programmausführung nicht
Es tritt ein Fehler auf, aber das Programm kann weiterhin ausgeführt werden und auch in den Fehlerbehandlungsprozess eintreten
Informationen zu Fehlertypen in PHP finden Sie hier zu diesem ausführlicheren Artikel – Zusammenfassung des PHP-Fehlermechanismus
Handbuch – Die Laufzeitkonfiguration wird ausführlich erläutert, es gibt jedoch einige Konfigurationen, die noch besondere Aufmerksamkeit erfordern
error_reporting
Fehlertypen melden, es wird empfohlen, E_ALL
in der Entwicklungs-/Testumgebung zu konfigurieren. Nachdem Sie alle Fehlertypen behoben haben, konfigurieren Sie E_ALL & E_DEPRECATED
in der Produktionsumgebung : Alle Fehler außer veralteten Fehlern melden
display_errors
Ob Fehler angezeigt werden sollen, in der Produktionsumgebung auf „false“ konfigurieren und mit den Einstellungen von error_reporting
oben übereinstimmen bedeutet: Alle Fehler außer veralteten Fehlern melden, aber keine Fehlermeldung anzeigen.
log_errors
Ob die Fehlerprotokollierung aktiviert ist, Die Produktionsumgebung muss aktiviert sein aktiviert sein Bei den oben genannten beiden Konfigurationen bedeutet dies: Der Bericht wird verworfen. Bei allen Fehlern außer Fehlern wird die Fehlermeldung nicht angezeigt, aber die Fehlermeldung wird aufgezeichnet (nur PHP selbst kann die Fehlermeldung bearbeiten ) zum Protokoll.
error_log
Geben Sie die falsche Datei an(Syslog ist ein besonderer Wert)Es ist nicht standardmäßig festgelegt Handbuch:
Wenn diese Konfiguration nicht festgelegt ist, wird eine Fehlermeldung an den SAPI-Fehlerlogger gesendet
Im Allgemeinen , wenn nicht festgelegt, wird es im Fehlerprotokoll von Apache/Nginx aufgezeichnet. Bei den oben genannten drei Konfigurationen bedeutet dies: Alle Fehler außer veralteten Fehlern melden Fehler, es wird keine Fehlermeldung angezeigt, aber sie wird im Apache/Nginx aufgezeichnet Protokoll. Wenn der Dateipfad konfiguriert ist, bedeutet dies: Alle Fehler außer veralteten Fehlern melden, es wird keine Fehlermeldung angezeigt, aber sie wird im file_dir
Protokoll aufgezeichnet.
Das Obige Konfigurationen wirken sich auf die grundlegendste Leistung von PHP-Fehlern aus. Natürlich können diese Konfigurationen im Code durch ini_set()
oder PHP-FPM-Konfigurationsänderungen
. Denen, auf die Sie am meisten achten sollten, sind set_error_handler
und set_exception_handler
, da sie in den oben erwähnten Fehler-/Ausnahmebehandlungsprozess
eingreifen können, nachdem ein Fehler aufgetreten ist , wird ein Fehlerbehandlungsprozess durchgeführt?
Schauen wir uns zunächst die Erklärung im PHP-Handbuch an: Fehler
Kurz gesagt, Der Standardverarbeitungsablauf wird durch die Konfiguration abgeschlossen, aber wir können einen benutzerdefinierten Fehlerbehandlungsablauf einrichten
oben erwähnt, gibt es zwei Arten von Fehlern, wie kann man also mit solchen Fehlern umgehen, die die Ausführung des Skripts abbrechen? set_error_handler
kann diese Art von Fehlern nicht verarbeiten, die leicht ignoriert werden können.
Dieses Problem wird grundsätzlich wie folgt gelöst (habe noch keine anderen Lösungen gesehen):
// 终止脚本的错误会终止脚本执行 // 即会调用已通过register_shutdown_function注册的处理函数 // 由此可注册我们的错误处理流程, 这样就进入了自定义错误流程 register_shutdown_function('FatalErrorHandle'); ... FatalErrorHandle(array $error = null) { ... if (null === $error) { // 通过这种方式可以获取最后一条错误 $error = error_get_last(); } ... // log or other logic }
Gemäß der Erklärung in der w3cPHP-Ausnahmebehandlung:
Die Ausnahmebehandlung wird verwendet, um den normalen Ablauf des Skripts zu ändern, wenn eine bestimmte Fehlersituation (Ausnahmesituation) auftritt. Diese Situation wird als Ausnahme bezeichnet.
Wenn eine Ausnahme ausgelöst wird, passiert normalerweise Folgendes:
Der aktuelle Codestatus wird gespeichert.
Die Codeausführung wird auf umgeschaltet vordefinierte Ausnahmehandlerfunktion
Je nach Situation kann der Prozessor die Codeausführung von einem gespeicherten Codestatus aus neu starten, die Skriptausführung beenden oder die Skriptausführung von einer Stelle innerhalb oder außerhalb des Codes aus fortsetzen
Nicht abgefangene Ausnahmen beenden die Skriptausführung und generieren einen E-ERROR-Fehler. Andernfalls wird der standardmäßige Fehlerbehandlungsprozess von PHP ausgeführt, der im Protokoll aufgezeichnet wird. In Bezug auf das Programmierkonzept sollten Ausnahmen von Fehlern getrennt werden, die für Benutzer vorhersehbar sind, nicht den Erwartungen entsprechen und eine kontrollierbare Struktur haben.
Das oben erwähnte wird zur Behandlung von Ausnahmen verwendet. und seine Verwendung ist die gleiche wie bei set_exception_handler
. Die Ausnahmebehandlung ist in jedem Framework sehr ausgereift, set_error_handler
wird in set_exception_handler
auf die Framework-Handhabungsebene übertragen. um den Zweck der Benutzersteuerung der Ausnahmebehandlung zu erreichen und eine Anpassung und Erweiterung zu erreichen.Exception
Zusammenfassung des PHP-Fehlermechanismus
Ausnahme
Fehler
PHP-Ausnahmebehandlung
Symfony Debug: Es handelt sich um eine vollständige Anwendung, das kann man sagen Um ein umfassendes Anleitungs-Tutorial zu erhalten, werden alle fehlerbezogenen Kenntnisse abgedeckt. Es wird empfohlen, den Quellcode zu lesen.
Das obige ist der detaillierte Inhalt vonProbleme bei der PHP-Fehlerbehandlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!