PHP
Referenzliste
set_error_handler
Fehlerbehandlungsfunktionen
Befehl:
mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )
Parameter-Liste:
Beschreibung | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Die benutzerdefinierte Funktion erwartet notwendig zwei Parameter: den Fehlercode und eine Zeichenkette, die den Fehler beschreibt. Zudem gibt es drei optionale Parameter, die übergeben werden können: der Name der Datei, in der der Fehler auftrat, die Nummer der Zeile, in der der Fehler auftrat, und der Kontext, in welchem der Fehler auftrat (ein Array, das auf die Stelle in der aktiven Symboltabelle verweist, wo der Fehler auftrat). Die Funktion lässt sich wie folgt darstellen: handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )
FALSE zurückgibt, wird mit der normalen Fehlerbehandlung fortgesetzt. | |||||||||||||
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, wird error_handler unabhängig von der Einstellung error_reporting bei jedem Fehler aufgerufen. |
Beschreibung:
Setzt eine benutzerdefinierte Funktion (
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ässige PHP-Fehlerbehandlung vollkommen umgangen wird! 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:
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.
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ässige PHP-Fehlerbehandlung vollkommen umgangen wird! 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.
Aktiv in Version:
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
Siehe auch:
Gibt an, welche PHP-Fehlermeldungen gemeldet werden
Rekonstruiert die zuvor benutzte Fehlerbehandlungsfunktion
Erzeugt eine benutzerdefinierte Fehlermeldung/Warnung/Benachrichtigung
set_error_handler() - Beispiel:
Eingabe:
<?php // Fehlerbehandlungsfunktion function myErrorHandler($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile) { 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 ?>
Ausgabe:
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 />
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 />
Beschreibung:
Beschreibung | |
---|---|
5.5.0 | error_handler akzeptiert nun NULL . |
5.2.0 | Die Fehlerbehandlung muss FALSE zurückgeben, um $php_errormsg zu füllen. |
5.0.0 | Der Parameter error_types wurde hinzugefügt. |
4.3.0 | Anstelle eines Funktionsnamens kann auch ein Array, das eine Referenz auf ein Objekt und einen Methodennamen enthält, als error_handler übergeben werden. |
4.0.2 | Drei optionale Parameter für die Benutzerfunktionerror_handler hinzugefügt: den Dateinamen, die Zeilennummer und den Kontext. |
Fehlerbehandlungsfunktionen