Heim > Backend-Entwicklung > PHP-Tutorial > Probleme bei der PHP-Fehlerbehandlung

Probleme bei der PHP-Fehlerbehandlung

迷茫
Freigeben: 2023-03-06 22:08:02
Original
1446 Leute haben es durchsucht

PHPs Fehlerbehandlungsmechanismus

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.

Grundlegendes Kenntnisse

Machen Sie sich vorher mit den Grundkenntnissen von PHP-Fehlern vertraut

  • Vordefinierte Konstanten

  • Laufzeitkonfiguration

  • Ausnahme

  • Fehlerbehandlungsfunktion

Vordefinierte Konstanten

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:

  1. manuell vom Benutzer ausgelöst
    E_USER_NOTICE, E_USER_WARNING , E_USER_ERROR, E_USER_DEPRECATED

  2. Benutzer verursacht
    E_NOTICE, E_PARSE, E_WARNING, E_ERROR, E_COMPILE_ERROR, E_COMPILE_WARNING, E_STRICT, E_RECOVERABLE_ERROR

  3. verursacht durch den PHP-Kernel
    E_CORE_ERROR, E_CORE_WARNING

aus der Perspektive, ob um die Programmausführung zu beenden Schauen Sie, es kann in zwei Kategorien unterteilt werden

  1. Programmausführung beenden
    Das Programm wird beendet und tritt in den Fehlerbehandlungsprozess ein

  2. 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

Laufzeitkonfiguration

Handbuch – Die Laufzeitkonfiguration wird ausführlich erläutert, es gibt jedoch einige Konfigurationen, die noch besondere Aufmerksamkeit erfordern

  1. 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

  2. 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.

  3. 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.

  4. 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

Fehler geändert werden. Es gibt nicht viele Fehlerbehandlungsfunktionen

. 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

Wie man mit Fehlern umgeht, die die Skriptausführung beenden

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
}
Nach dem Login kopieren

Ausnahme

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

Der Fehlerbehandlungsmechanismus von PHP wird immer ignoriert, spielt jedoch eine große Rolle beim Debuggen und Überwachungsfehler. In diesem Artikel werden hauptsächlich die wichtigsten Kenntnisse vorgestellt. Klicken Sie hier, um eine Zusammenfassung zu erstellen. Weitere Informationen finden Sie im Handbuch

Vordefiniert Konstanten

Laufzeitkonfiguration

Fehlerbehandlungsfunktion

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage