Neueste Web-Entwicklung Tutorials
 

PHP Fehlerbehandlung


Die Standard-Fehlerbehandlung in PHP ist sehr einfach. Wird eine Fehlermeldung mit dem Dateinamen, Zeilennummer und eine Nachricht, die den Fehler beschreibt, wird an den Browser gesendet.


PHP Fehlerbehandlung

Wenn Skripte und Web-Anwendungen erstellen, die Fehlerbehandlung ist ein wichtiger Bestandteil. Wenn Ihr Code Fehlerprüfung Code fehlt, kann Ihr Programm sieht sehr unprofessionell und Sie können Sicherheitsrisiken offen sein.

Dieses Tutorial enthält einige der häufigsten Fehlerprüfung Methoden in PHP.

Wir werden verschiedene Fehlerbehandlungsmethoden zeigen:

  • Einfach " die() " Aussagen
  • Individuelle Fehler und Fehler-Trigger
  • Fehler melden

Grundfehlerbehandlung: Mit der die() Funktion

Das erste Beispiel zeigt ein einfaches Skript, das eine Textdatei öffnet:

<?php
$file=fopen("welcome.txt","r");
?>

Wenn die Datei ist nicht vorhanden möglicherweise einen Fehler wie diese:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

Um den Benutzer davon ab, eine Fehlermeldung wie die oben zu verhindern, prüfen wir, ob die Datei vorhanden sein, bevor wir versuchen, darauf zuzugreifen:

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

Nun, wenn die Datei nicht existiert, erhalten Sie einen Fehler wie folgt aus:

File not found

Der obige Code ist effizienter als der frühere Code, weil es einen einfachen Fehlerbehandlungsmechanismus verwendet das Skript nach dem Fehler zu stoppen.

Doch einfach das Skript zu stoppen ist nicht immer der richtige Weg zu gehen. Lassen Sie sich an alternativen PHP-Funktionen für den Umgang mit Fehlern einen Blick darauf werfen.


Erstellen eines Fehler Benutzerdefinierte Handler

eine benutzerdefinierte Fehlerbehandlungsroutine zu erstellen ist ganz einfach. Wir erstellen Sie einfach eine spezielle Funktion, die aufgerufen werden kann, wenn ein Fehler in PHP auftritt.

Diese Funktion muss ein Minimum von zwei Parametern (Fehlerstufe und Fehlermeldung) verarbeiten kann , sondern kann auf fünf Parameter akzeptiert bis (optionally: file, line-number, and the error context) :

Syntax

error_function(error_level,error_message,
error_file,error_line,error_context)
Parameter Beschreibung
error_level Erforderlich. Gibt den Fehlerbericht Ebene für den benutzerdefinierten Fehler. Muss ein Wert Zahl sein. Siehe Tabelle unten für mögliche Fehlerberichtsebene
error_message Erforderlich. Gibt die Fehlermeldung für den Benutzer-definierten Fehler
error_file Optional. Gibt den Dateinamen, in dem der Fehler aufgetreten ist
error_line Optional. Gibt die Zeilennummer, in der der Fehler aufgetreten ist
error_context Optional. jede Variable, und ihre Werte, die im Gebrauch gibt ein Array enthält, wenn der Fehler aufgetreten ist

Fehlerbericht Ebenen

Diese Fehlerberichtsebene sind die verschiedenen Arten von Fehlern der benutzerdefinierten Fehlerhandler können verwendet werden für:

Wert Konstante Beschreibung
2 E_WARNING Nicht-tödliche Laufzeitfehler. Die Ausführung des Skripts nicht angehalten wird,
8 E_NOTICE Laufzeit bemerkt. Das Skript etwas gefunden, dass ein Fehler sein könnte, könnte aber auch passieren, wenn ein Skript läuft normal
256 E_USER_ERROR Fatal Nutzer erzeugten Fehler. Dies ist wie ein E_ERROR vom Programmierer unter Verwendung des PHP - Funktion eingestellt trigger_error()
512 E_USER_WARNING Nicht-tödliche user-generated Warnung. Dies ist wie ein E_WARNING vom Programmierer unter Verwendung des PHP - Funktion eingestellt trigger_error()
1024 E_USER_NOTICE Nutzergenerierte Mitteilung. Dies ist wie ein E_NOTICE vom Programmierer unter Verwendung des PHP - Funktion eingestellt trigger_error()
4096 E_RECOVERABLE_ERROR Abfangbare fatale Fehler. Das ist wie ein E_ERROR kann aber durch einen Benutzer definiert Griff gefangen werden (see also set_error_handler() )
8191 E_ALL Alle Fehler und Warnungen (E_STRICT became a part of E_ALL in PHP 5.4)

Lassen Sie uns nun eine Funktion erstellen, um Fehler zu umgehen:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

Der obige Code ist eine einfache Fehlerbehandlung Funktion. Wenn es ausgelöst wird, wird es die Fehlerstufe und eine Fehlermeldung. Es gibt dann die Fehlerstufe und Meldung und beendet das Skript.

Nun, da wir eine Fehlerbehandlungsfunktion erstellt haben, müssen wir entscheiden, wann sie ausgelöst werden soll.


Set Error Handler

Der Standardfehlerhandler für PHP ist die in Fehlerbehandlung gebaut. Wir werden die Funktion über der Standard-Fehlerbehandlung für die Dauer des Skripts zu machen.

Es ist möglich, die Fehlerbehandlung für nur einige Fehler anwenden zu ändern, dass die Art und Weise des Skript verschiedene Fehler auf unterschiedliche Weise behandeln kann. Doch in diesem Beispiel werden wir unsere eigene Fehlerbehandlung für alle Fehler verwenden:

set_error_handler("customError");

Da wir unsere eigene Funktion , um alle Fehler behandeln wollen, der set_error_handler() nur einen Parameter benötigt, könnte ein zweiter Parameter einen Fehler Ebene zu spezifizieren hinzugefügt werden.

Beispiel

Testen der Fehlerbehandlung durch in der Ausgangsgröße versucht, die nicht vorhanden ist:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

Der Ausgang des obigen Code sollte wie folgt sein:

Error: [8] Undefined variable: test

Trigger-Fehler

In einem Skript in den Benutzer Daten eingeben kann es sinnvoll Fehler auszulösen, wenn eine illegale Eingabe erfolgt. In PHP, dies wird durch die getan trigger_error() Funktion.

Beispiel

In diesem Beispiel tritt ein Fehler auf, wenn das "test" Variable ist größer als "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

Der Ausgang des obigen Code sollte wie folgt sein:

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

Ein Fehler kann überall ausgelöst werden Sie in einem Skript wünschen, und durch einen zweiten Parameter hinzugefügt haben, können Sie angeben, welche Fehlerstufe ausgelöst wird.

Mögliche Fehlertypen:

  • E_USER_ERROR - Fatal Laufzeitfehler user-generated. Fehler, die aus werden nicht gestellt. Die Ausführung des Skripts wird gestoppt
  • E_USER_WARNING - Nicht fatal nutzergenerierte Laufzeitwarnung. Die Ausführung des Skripts nicht angehalten wird,
  • E_USER_NOTICE - Standard. Nutzergenerierte Laufzeit kündigen. Das Skript etwas gefunden, dass ein Fehler sein könnte, könnte aber auch passieren, wenn ein Skript läuft normal

Beispiel

In diesem Beispiel tritt ein E_USER_WARNING , wenn das "test" Variable ist größer als "1" . Wenn ein E_USER_WARNING auftritt werden wir unsere eigene Fehlerbehandlung verwenden und das Skript beenden:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Der Ausgang des obigen Code sollte wie folgt sein:

Error: [512] Value must be 1 or below
Ending Script

Nun, da wir gelernt haben, unsere eigenen Fehler zu erstellen und wie man sie auslösen, können Sie einen Blick auf die Fehlerprotokollierung nehmen.


Fehlerprotokollierung

Standardmäßig sendet PHP ein Fehlerprotokoll, um das Protokollierungssystem des Servers oder eine Datei, je nachdem, wie die error_log Konfiguration in der php.ini-Datei festgelegt wird. Durch die Verwendung der error_log() Funktion , die Sie Fehlerprotokolle in einer bestimmten Datei oder ein Remote - Ziel senden.

Senden von Fehlermeldungen an sich selbst per E-Mail kann eine gute Möglichkeit sein, bestimmte Fehler benachrichtigt zu werden.

Senden Sie eine Fehlermeldung per E-Mail

Im Beispiel unten werden wir eine E-Mail mit einer Fehlermeldung und beenden das Skript senden, wenn ein bestimmte Fehler auftritt:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Der Ausgang des obigen Code sollte wie folgt sein:

Error: [512] Value must be 1 or below
Webmaster has been notified

Und die Post aus dem empfangenen Code sieht oben wie folgt aus:

Error: [512] Value must be 1 or below

Dies sollte nicht mit allen Fehlern verwendet werden. mit dem Standard-PHP-Logging-System Regelmäßige Fehler sollten auf dem Server protokolliert werden.