Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erklärung der globalen Fehlerbehandlung in PHP

Detaillierte Erklärung der globalen Fehlerbehandlung in PHP

Jul 07, 2017 am 10:22 AM
php 处理 详解

PHP verfügt über ein eigenes try{throw{}}catch{}-Ausnahme-/Fehlerabfangsystem, das in einer Produktionsumgebung schwer zu verwenden ist. In einer Produktionsumgebung verlangen wir im Allgemeinen, dass PHP sofort reagiert, sobald eine Ausnahme/ein Fehler auftritt beendet das Skript und zeigt es dem Besucher an. Der Server gibt eine Fehlermeldung aus und sendet eine Nachricht an den Administrator über benutzerdefinierte Funktion

Zweck dieses Artikels

Global of PHP Error Handling ist bei der Entwicklung von Projekten sehr nützlich. Es kann Entwicklern helfen, einige Probleme schnell zu lokalisieren und die Arbeitseffizienz zu verbessern. Standardmäßig werden globale Fehler direkt ausgegeben, aber eine kürzlich während der Entwicklung verwendete Framework-Bibliothek hat eine globale Fehlerbehandlung festgelegt, was dazu führt, dass viele Fehlermeldungen nicht ausgegeben werden und es zeitaufwändig ist, Probleme zu lokalisieren. Deshalb habe ich die Implementierung dieser Bibliothek untersucht und festgestellt, dass sie error_reporting und set_error_handler setzt, was dieses Phänomen verursacht. Notieren Sie nun die Verwendung dieser beiden Funktionen als Memo.

Hintergrund

PHP verfügt nicht über eine Typerkennung. Es ist für Entwickler einfacher, falsche Wörter einzugeben, was zu schwerwiegenden Fehlern und schließlich dazu führt, dass das Skript nicht mehr ausgeführt wird. Wenn Sie zu diesem Zeitpunkt keine Fehlermeldung erhalten, wird es sehr schmerzhaft sein. Sie müssen mit dem Debuggen ab der ersten Codezeile im Skript beginnen und Tausende von Codezeilen weiter ausdrucken oder wiederholen, bis Sie das falsch geschriebene Wort gefunden haben. Dann müssen Sie zurückgehen und alle zuvor hinzugefügten Abdrücke oder Echos löschen. Das ist ein extrem langweiliger Job.

Allgemeine Situation

Unter normalen Umständen gibt PHP den schwerwiegenden Fehler direkt aus und gibt die Fehlerquelle (Dateiadresse, Zeilennummer) und den Grund usw. aus ., sodass Entwickler Probleme leicht lokalisieren können.

Aber manchmal werden diese Informationen aufgrund von php.ini-Einstellungen oder Problemen mit der Framework-Konfiguration von Drittanbietern nicht ausgegeben. Zu diesem Zeitpunkt müssen Sie lernen, relevante Parameter selbst festzulegen und diese Fehlermeldungen schnell zu finden Probleme.

error_reporting

error_reporting ist ein globaler PHP-Konfigurationsparameter in php.ini. Dient zum Konfigurieren der Fehlerausgabestufe. Die Parameter sind Bits, mit denen die Fehlerausgabestufe festgelegt werden kann. Die folgenden Informationen werden aus php.ini kopiert:

; error_reporting is a bit-field. Or each number up to get desired error
; reporting level
; E_ALL - All errors and warnings (doesn't include E_STRICT)
; E_ERROR - fatal run-time errors
; E_RECOVERABLE_ERROR - almost fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it's automatically initialized to an
; empty string)
; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
;
; Examples:
;
; - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices and coding standards warnings
;
error_reporting = E_ALL & ~E_NOTICE
Nach dem Login kopieren


Standardmäßig gibt PHP alle Fehlermeldungen außer Hinweisen aus. Ebenso stellt die PHP-Standardfunktion die gleichnamige Funktion error_reporting(int $level) bereit, die zur Ausführung derselben Funktion in PHP-Skripten verwendet wird. Dies hat keine Auswirkungen auf andere Programme. Es ist zu beachten, dass die Fehlerausgabe deaktiviert ist, wenn $level 0 ist, d. h. es werden keine Fehler ausgegeben.

set_error_handler

PHPs standardmäßige Fehlerbehandlung besteht darin, die Nachricht auszugeben. Manchmal müssen Sie jedoch andere Vorgänge definieren. In diesem Fall müssen Sie die Fehlerbehandlungsfunktion anpassen. PHP bietet die integrierte Funktion set_error_handler, die uns bei der Registrierung unserer eigenen Fehlerbehandlungsfunktionen hilft. Der Funktionsprototyp lautet wie folgt:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

Es ist erwähnenswert, dass selbst wenn die Fehlerbehandlungsfunktion registriert ist, Das Standardverhalten ist weiterhin: Bei der Ausführung wird die Fehlermeldung weiterhin ausgegeben, wenn ein Fehler auftritt. Sie müssen daher die Fehlerstufe im Programm explizit auf 0 setzen und dann Ihre eigene Fehlerbehandlungsfunktion registrieren. Dieser Ansatz ist besonders in einer Produktionsumgebung wichtig, denn selbst wenn etwas schief geht, werden sensible interne Fehlerinformationen nicht potenziell böswilligen Benutzern zugänglich gemacht. Es ist auch wichtig darauf hinzuweisen, dass benutzerdefinierte Fehlerbehandlungsfunktionen keine schwerwiegenden Fehler (z. B. Kompilierungsfehler) behandeln können. Das Folgende ist ein Beispiel für die Verwendung einer benutzerdefinierten Fehlerbehandlungsfunktion:

<?php
error_reporting (0);
function error_handler ($error_level, $error_message, $file, $line) {
  $EXIT = FALSE;
  switch ($error_level) {
    case E_NOTICE:
    case E_USER_NOTICE:
      $error_type = &#39;Notice&#39;;
      break;
    case E_WARNING:
    case E_USER_WARNING:
      $error_type = &#39;Warning&#39;;
      break;
    case E_ERROR:
    case E_USER_ERROR:
      $error_type = &#39;Fatal Error&#39;;
      $EXIT = TRUE;
      break;
    default:
      $error_type = &#39;Unknown&#39;;
      $EXIT = TRUE;
      break;
  }
  printf ("%s: %s in %s on line %d\n", $error_type, $error_message, $file, $line);
 
  if ($EXIT) {
    die();
  }
}
set_error_handler (&#39;error_handler&#39;);
 
//new NonExist();
echo $novar;
echo 3/0;
trigger_error (&#39;Trigger a fatal error&#39;, E_USER_ERROR);
new NonExist();
?>
Nach dem Login kopieren

Das Ausführen dieses Skripts kann die folgende Ausgabe erhalten:

Notice: Undefined variable: novar in /your/php_demo_file.php on line 40

Warning: pision by zero in /your/php_demo_file.php on line 41

Fatal Error: Trigger a fatal error in /your/php_demo_file.php on line 42
Nach dem Login kopieren

Wie Sie sehen können, ist die letzte „neue NoExistClass ()“-Ausnahme wurde von der benutzerdefinierten Fehlerbehandlungsfunktion nicht abgefangen.

Abschließend registriert set_Exception_handler die Ausnahmebehandlung der obersten Ebene. In Webanwendungen können Sie diese festlegen und dann einheitlich zur Fehlerbehandlungsseite springen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der globalen Fehlerbehandlung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

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.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

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

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

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

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

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

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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 PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

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.

See all articles