Ein Beispiel einstellen...
[email protected] ("horseland hispeed") Tue, 18 Sep 2007 15:33:02 +0200
| Newsgroups | php.doc.license |
|---|---|
| Message-ID | <000301c7f9f8$706ee570$2101a8c0@frediund90935f> |
Sehr geehrte Damen und Herren,
ich habe schon einmal versucht Sie wegen eines Eintrages anzufragen. Ich
schreibe auf meiner Site ein Manual und hätte nun gerne eines Ihrer
Beispiele übernommen (mit Verweis darauf).
Bei dem Beispiel handelt es sich um die Funktion set_error_handler,
übernehmen wollte ich den Quelltext in etwas veränderter Form (mehr
deutsch).
Für Ihre prompte Antwort bedanke ich mich bereits im Voraus und verbleibe
mit freundlichen Grüssen
Dies wäre der komplette Text, den ich einstellen möchte:
--------------------------------------------------------------------------
Allgemeine Beschreibung:<br /> <br />
set_error_handler() legt die benannte Funktion als aktuellen Fehlerhandler
fest. Die Funktion kann beliebig festgelegt werden, üblicherweise gibt sie
definierte Fehlermeldungen aus und bei einem kritischen Fehler sollten
zusätzlich "Aufräumarbeiten" durchgeführt werden. <br />
Die Funktion wird mit zwei Parametern aufgerufen: Dem Fehlercode und einem
String, der den Fehler beschreibt. Es können noch drei zusätzliche Parameter
angegeben werden; der Name der Datei wo der Fehler auftrat, die Nummer der
Zeile in der genannten Datei wo der Fehler auftrat und den Kontext in
welchem der Fehler auftrat. Die Funktion gibt den Namen der
benutzerdefinierten Funktion aus, oder false wenn irgend ein Fehler beim
setzen des Handlers auftrat.
<br /> <br />
Anmerkung: Es kann auch ein Array anstatt einer Funktion definiert werden,
welches eine Referenz auf ein Objekt und einen Methodennamen enthält
übergibt.
<br />
Die folgenden Typen können nicht von einer benutzerdefinierten Funktion
behandelt werden: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,
E_COMPILE_ERROR UND E_COMPILE_WARNING.
<br /> <br />
Untenstehendes Beispiel wurde ausnahmsweise aus dem PHP-Handbuch des
"PHP-Manuals (Copyright © 1997 - 2005 by the PHP Documentation Group)
übernommen. Leider haben wir auf unsere Veröffentlichungsanfrage keine
Reaktion erhalten -d.h. die Mail kam beim Empfänger nicht an.
// umdefinieren der Konstanten - nur in PHP 4
define("FATAL", E_USER_ERROR);
define("ERROR", E_USER_WARNING);
define("WARNING", E_USER_NOTICE);
// die Stufe für dieses Skript einstellen
error_reporting(FATAL | ERROR | WARNING);
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case FATAL:
echo "<b>FATALER ERROR</b> [$errno] $errstr<br />\n";
echo " Fataler Fehler in Linie $errline in der Datei $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "abbrechen...<br />\n";
exit(1);
break;
case ERROR:
echo "<b>ERROR</b> [$errno] $errstr<br />\n";
break;
case WARNING:
echo "<b>WARNUNG</b> [$errno] $errstr<br />\n";
break;
default:
echo "Unbestimmter error Typ: [$errno] $errstr<br />\n";
break;
}
}
// Funktion zum Test der Fehlerbehandlung
function scale_by_log($vect, $scale)
{
if (!is_numeric($scale) || $scale <= 0) {
trigger_error("log(x) for x <= 0 ist undefiniert, benutze: scale =
$scale",
FATAL);
}
if (!is_array($vect)) {
trigger_error("Inkorrekte Eingabe vector, Feld mit Werten erwartet",
ERROR);
return null;
}
for ($i=0; $i<count($vect); $i++) {
if (!is_numeric($vect[$i]))
trigger_error("Wert an Position $i ist keine Nummer, verwendet 0
(zero)",
WARNING);
$temp[$i] = log($scale) * $vect[$i];
}
return $temp;
}
// auf die benutzerdefinierte Fehlerbehandlung umstellen
$old_error_handler = set_error_handler("myErrorHandler");
// einige Fehler auslösen, zuerst wird ein gemischtes Array
// definiert mit einem nichtnummerischen Eintrag
echo "vector a<br />";
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
print_r($a);
// ein zweites Array erzeugen, das Warnungen generiert
echo "----<br />vector b - Warnung (b = log(PI) * a)<br />";
$b = scale_by_log($a, M_PI);
print_r($b);
// hier ist der Grund für das Problem: anstatt einem Array
// wird ein String übergeben
echo "----<br />vector c - Fehler<br />";
$c = scale_by_log("not array", 2.3);
var_dump($c);
// dies ist ein kritischer Fehler, der log() ist für null
// oder negative Werte nicht definiert
echo "----<br />vector d - fataler Fehler<br />";
$d = scale_by_log($a, -2.5);
----------------------------------------------------------------------