set_error_handler
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
set_error_handler — Bestimmt eine benutzerdefinierte Funktion zur Fehlerbehandlung
Beschreibung
Setzt eine benutzerdefinierte Funktion (error_handler
),
um Fehler in einem Skript zu behandeln.
Mit dieser Funktion können Sie Ihre eigene Behandlung von Laufzeitfehlern definieren, beispielsweise in Anwendungen, die bei einem kritischen Fehler die Löschung von Daten bzw. Dateien erfordert, oder wenn es nötig ist, unter bestimmten Bedingungen (mit der Funktion trigger_error()) eine Fehlermeldung zu generieren.
Vergessen Sie bei der Implementation auf keinen Fall, dass auf diese Weise
die standardmäßige PHP-Fehlerbehandlung für die durch error_types
angegebenen
Fehlertypen vollkommen umgangen wird, außer wenn die Callback-Funktion FALSE
zurück gibt. Die
Einstellungen der Funktion error_reporting() haben keine
Auswirkung, und Ihre eigene Fehlerbehandlungsroutine wird ohne Rücksicht
darauf aufgerufen. Sie können jedoch immer noch den aktuellen Wert von error_reporting lesen und entsprechend
handeln. Es ist besonders zu beachten, dass dieser Wert 0 sein wird, falls
die Anweisung, die den Fehler verursacht hat, mit dem @ Fehler-Kontroll-Operator
versehen ist.
Beachten Sie auch, dass Sie dafür zuständig sind, bei Bedarf die() aufzurufen. Nach der Funktion für die Fehlerbehandlung wird die Ausführung des Skripts bei der Anweisung fortgesetzt, die auf die Fehler verursachende Anweisung folgt.
Die folgenden Fehlertypen können nicht von einer benutzerdefinierten
Funktion behandelt werden: E_ERROR
,
E_PARSE
, E_CORE_ERROR
,
E_CORE_WARNING
, E_COMPILE_ERROR
,
E_COMPILE_WARNING
und die meisten
E_STRICT
, die in der Datei ausgelöst werden, in der
set_error_handler() aufgerufen wird.
Falls Fehler auftreten, bevor das Skript ausgeführt wird (z.B. beim Hochladen von Dateien), kann eine benutzerdefinierte Fehlerbehandlung nicht aufgerufen werden, weil sie zu diesem Zeitpunkt noch nicht registriert ist.
Parameter-Liste
-
error_handler
-
Ein Callback mit der folgenden Signatur.
NULL
kann statt dessen übergeben werden, um diesen Handler auf seinen Standardwert zurück zu setzen. Statt eines Funktionsnamens, kann ein Array, das eine Objektreferenz und einen Methodennamen enthält, bereit gestellt werden.handler ( int$errno
, string$errstr
[, string$errfile
[, int$errline
[, array$errcontext
]]] ) : bool-
errno
-
Der erste Parameter
errno
enthält den Schweregrad des ausgelösten Fehlers als Integer. -
errstr
-
Der zweite Parameter
errstr
enthält die Fehlermeldung als String. -
errfile
-
Der dritte Parameter
errfile
ist optional. Er enthält den Namen der Datei, in der der Fehler verursacht wurde, als String. -
errline
-
Der vierte Parameter
errline
ist optional. Er enthält die Zeilennummer, in der der Fehler verursacht wurde, als Integer. -
errcontext
-
Der fünfte Parameter
errcontext
ist optional. Es handelt sich um ein Array, das auf die Stelle der aktiven Symboltabelle zeigt, die den Fehler verursacht hat. Mit anderen Worten:errcontext
enthält ein Array mit allen Variablen, die im fehlerauslösenden Bereich existierten. Die benutzerdefinierte Fehlerbehandlung darf den Fehlerkontext nicht verändern.WarnungDieser Parameter ist von PHP 7.2.0 an MISSBILLIGT. Es wird unbedingt davon abgeraten, sich auf diesen zu verlassen.
Falls diese Funktion
FALSE
zurückgibt, wird mit der normalen Fehlerbehandlung fortgesetzt. -
-
Fehlertypen
-
Kann wie die php.ini-Konfigurationseinstellung error_reporting, die bestimmt, welche Fehler angezeigt werden zum Maskieren des Aufrufs der
error_handler
-Funktion verwendet werden. Wird diese Maske nicht gesetzt, wirderror_handler
unabhängig von der Einstellung error_reporting bei jedem Fehler aufgerufen.
Rückgabewerte
Gibt eine Zeichenkette, die die zuvor definierte Fehlerbehandlungsroutine
enthält (falls eine definiert wurde). Wenn der eingebaute Errorhandler
verwendet wurde, wird NULL
zurückgegeben. NULL
wird ebenfalls zurückgegeben,
falls ein Fehler wie z.B. ein ungültiger Callback aufgetreten ist.
Wenn der vorgenannte Errorhandler eine Klassenmethode war, gibt die Funktion
ein indiziertes Array mit dem Klassen- und dem Methodennamen zurück.
Changelog
Version | Beschreibung |
---|---|
7.2.0 |
errcontext wurde missbilligt. Die Verwendung
dieses Parameters erzeugt nun eine E_DEPRECATED -Notice.
|
5.5.0 |
error_handler akzeptiert nun NULL .
|
5.2.0 |
Die Fehlerbehandlung muss FALSE zurückgeben, um
$php_errormsg zu füllen.
|
Beispiele
Beispiel #1 Fehlerbehandlung mit set_error_handler() und trigger_error()
Das untenstehende Beispiel zeigt die Behandlung von internen Ausnahmen, indem Fehler ausgelöst und durch eine benutzerdefinierte Funktion behandelt werden:
<?php
// Fehlerbehandlungsfunktion
function myErrorHandler($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile)
{
if (!(error_reporting() & $fehlercode)) {
// Dieser Fehlercode ist nicht in error_reporting enthalten
return;
}
switch ($fehlercode) {
case E_USER_ERROR:
echo "<b>Mein FEHLER</b> [$fehlercode] $fehlertext<br />\n";
echo " Fataler Fehler in Zeile $fehlerzeile in der Datei $fehlerdatei";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Abbruch...<br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>Meine WARNUNG</b> [$fehlercode] $fehlertext<br />\n";
break;
case E_USER_NOTICE:
echo "<b>Mein HINWEIS</b> [$fehlercode] $fehlertext<br />\n";
break;
default:
echo "Unbekannter Fehlertyp: [$fehlercode] $fehlertext<br />\n";
break;
}
/* Damit die PHP-interne Fehlerbehandlung nicht ausgeführt wird */
return true;
}
// Funktion zum Test der Fehlerbehandlung
function logarithmisch_skalieren($vektor, $skalierung)
{
if (!is_numeric($skalierung) || $skalierung <= 0) {
trigger_error("log(x) ist für x <= 0 nicht definiert, Sie verwendeten: skalierung = $skalierung", E_USER_ERROR);
}
if (!is_array($vektor)) {
trigger_error("Fehlerhafter Eingabevektor, es wird ein Wertearray erwartet", E_USER_WARNING);
return null;
}
$temp = array();
foreach($vektor as $pos => $wert) {
if (!is_numeric($wert)) {
trigger_error("Der Wert an Position $pos ist keine Zahl, verwende 0 (Null)", E_USER_NOTICE);
$wert = 0;
}
$temp[$pos] = log($skalierung) * $wert;
}
return $temp;
}
// auf die benutzerdefinierte Fehlerbehandlung umstellen
$alter_error_handler = set_error_handler("myErrorHandler");
// ein paar Fehler auslösen, zuerst wird ein gemischtes Array mit einem
// nichtnumerischen Eintrag definiert
echo "Vektor a\n";
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
print_r($a);
// ein zweites Array erzeugen
echo "----\nVektor b - ein Hinweis (b = log(PI) * a)\n";
/* Der Wert an Position $pos ist keine Zahl, verwende 0 (Null) */
$b = logarithmisch_skalieren($a, M_PI);
print_r($b);
// das gibt Ärger: statt eines Arrays wird eine Zeichenkette übergeben
echo "----\nVektor c - eine Warnung\n";
/* Fehlerhafter Eingabevektor, es wird ein Wertearray erwartet */
$c = logarithmisch_skalieren("kein Array", 2.3);
var_dump($c); // NULL
// dies ist ein kritischer Fehler: log ist für Null oder negative Werte
// nicht definiert
echo "----\nVektor d - fataler Fehler\n";
/* log(x) ist für x <= 0 nicht definiert, Sie verwendeten: skalierung = $skalierung */
$d = logarithmisch_skalieren($a, -2.5);
var_dump($d); // wird nie erreicht
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Vektor a Array ( [0] => 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11 ) ---- Vektor b - ein Hinweis (b = log(PI) * a) <b>Mein HINWEIS</b> [1024] Der Wert an Position 2 ist keine Zahl, verwende 0 (Null)<br /> Array ( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281 ) ---- Vektor c - eine Warnung <b>Meine WARNUNG</b> [512] Fehlerhafter Eingabevektor, es wird ein Wertearray erwartet<br /> NULL ---- Vektor d - fataler Fehler <b>Mein FEHLER</b> [256] log(x) ist für x <= 0 nicht definiert, Sie verwendeten: skalierung = -2.5<br /> Fataler Fehler in Zeile 35 in der Datei trigger_error.php, PHP 5.2.1 (FreeBSD)<br /> Abbruch...<br />
Siehe auch
- ErrorException
- error_reporting() - Gibt an, welche PHP-Fehlermeldungen gemeldet werden
- restore_error_handler() - Rekonstruiert die zuvor benutzte Fehlerbehandlungsfunktion
- trigger_error() - Erzeugt eine benutzerdefinierte Fehlermeldung/Warnung/Benachrichtigung
- Errorlevel-Konstanten
- Informationen über den Callback-Typ
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-set-error-handler.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.