mirror of
https://github.com/php/doc-de.git
synced 2026-03-29 10:42:12 +02:00
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@149861 c90b9560-bf6c-de11-be94-00142212c4b1
242 lines
7.7 KiB
XML
242 lines
7.7 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.4 $ -->
|
|
<refentry id="function.set-error-handler">
|
|
<refnamediv>
|
|
<refname>set_error_handler</refname>
|
|
<refpurpose>
|
|
Bestimmt eine benutzerdefinierte Funktion zur Fehlerbehandlung.
|
|
</refpurpose>
|
|
</refnamediv>
|
|
<refsect1>
|
|
<title>Beschreibung</title>
|
|
<methodsynopsis>
|
|
<type>string</type><methodname>set_error_handler</methodname>
|
|
<methodparam><type>callback</type><parameter>error_handler</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
Setzt eine benutzerdefinierte Funktion (<parameter>error_handler</parameter>)
|
|
um Fehler in einem Skript zu bearbeiten. Die Funktion gibt die
|
|
zuvor benutzte Fehlerbehandlungsroutine (falls eine definiert
|
|
wurde) zurück oder &false;, falls ein Fehler auftrat. 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 <function>trigger_error</function>) eine
|
|
Fehlermeldung zu generieren.
|
|
</para>
|
|
<para>
|
|
Die benutzerdefinierte Funktion erwartet notwendig zwei Parameter:
|
|
den Fehlercode und eine Beschreibung des Fehlers als String. Ab PHP
|
|
4.0.2 sind zudem drei optionale Parameter verfügbar: 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 den Punkt in der aktiven Symboltabelle verweist, wo
|
|
der Fehler auftrat).
|
|
</para>
|
|
<note>
|
|
<simpara>
|
|
Anstelle eines Funktionsnamens kann auch ein Array, das eine
|
|
Referenz auf ein Objekt und einen Methodennamen enthält, übergeben
|
|
werden. (Seit PHP 4.3.0)
|
|
</simpara>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Die folgenden Fehlertypen können nicht von einer
|
|
benutzerdefinierten Funktion behandelt werden:
|
|
<constant>E_ERROR</constant>, <constant>E_PARSE</constant>,
|
|
<constant>E_CORE_ERROR</constant>, <constant>E_CORE_WARNING</constant>,
|
|
<constant>E_COMPILE_ERROR</constant> und <constant>E_COMPILE_WARNING</constant>.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Das untenstehende Beispiel zeigt die Behandlung von internen
|
|
Ausnahmen, indem eine Fehlermeldung und die Behandlung des Fehlers
|
|
durch eine benutzerdefinierte Funktion ausgelöst wird:
|
|
<example>
|
|
<title>
|
|
Fehlerbehandlung mit <function>set_error_handler</function> und
|
|
<function>trigger_error</function>
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
// 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);
|
|
|
|
// Fehlerbehandlungsfunktion
|
|
function myErrorHandler($errno, $errstr, $errfile, $errline)
|
|
{
|
|
switch ($errno) {
|
|
case FATAL:
|
|
echo "<b>FATAL</b> [$errno] $errstr<br />\n";
|
|
echo " Fatal error in line $errline of file $errfile";
|
|
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
|
|
echo "Aborting...<br />\n";
|
|
exit(1);
|
|
break;
|
|
case ERROR:
|
|
echo "<b>ERROR</b> [$errno] $errstr<br />\n";
|
|
break;
|
|
case WARNING:
|
|
echo "<b>WARNING</b> [$errno] $errstr<br />\n";
|
|
break;
|
|
default:
|
|
echo "Unkown error type: [$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 is undefined, you used: scale = $scale",
|
|
FATAL);
|
|
}
|
|
|
|
if (!is_array($vect)) {
|
|
trigger_error("Incorrect input vector, array of values expected", ERROR);
|
|
return null;
|
|
}
|
|
|
|
for ($i=0; $i<count($vect); $i++) {
|
|
if (!is_numeric($vect[$i]))
|
|
trigger_error("Value at position $i is not a number, using 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\n";
|
|
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
|
|
print_r($a);
|
|
|
|
// ein zweites Array erzeugen, das Warnungen generiert
|
|
echo "----\nvector b - a warning (b = log(PI) * a)\n";
|
|
$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 "----\nvector c - an error\n";
|
|
$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 "----\nvector d - fatal error\n";
|
|
$d = scale_by_log($a, -2.5);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Wenn Sie dieses Skript ausführen, erhalten Sie die folgende Ausgabe:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
vector a
|
|
Array
|
|
(
|
|
[0] => 2
|
|
[1] => 3
|
|
[2] => foo
|
|
[3] => 5.5
|
|
[4] => 43.3
|
|
[5] => 21.11
|
|
)
|
|
----
|
|
vector b - a warning (b = log(PI) * a)
|
|
<b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br />
|
|
Array
|
|
(
|
|
[0] => 2.2894597716988
|
|
[1] => 3.4341896575482
|
|
[2] => 0
|
|
[3] => 6.2960143721717
|
|
[4] => 49.566804057279
|
|
[5] => 24.165247890281
|
|
)
|
|
----
|
|
vector c - an error
|
|
<b>ERROR</b> [512] Incorrect input vector, array of values expected<br />
|
|
NULL
|
|
----
|
|
vector d - fatal error
|
|
<b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br />
|
|
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br />
|
|
Aborting...<br />
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Es ist wichtig und darf nicht vergessen werden, dass die
|
|
standardmässige PHP Fehlerbehandlung vollkommen umgangen wurde. Die
|
|
Einstellungen der Funktion <function>error_reporting</function>
|
|
haben keine Auswirkung und Ihre eigene Fehlerbehandlungsroutine
|
|
wird ohne Rücksicht darauf aufgerufen. Sie können jedoch immer noch
|
|
den aktuellen Wert von <link linkend="ini.error-reporting">error_reporting</link>
|
|
lesen und entsprechend handeln. Von besonderer Bedeutung ist, dass
|
|
dieser Wert 0 sein wird, falls der Befehl, der den Fehler verurscht
|
|
hat, mit dem
|
|
<link linkend="language.operators.errorcontrol">@ error-control operator</link> versehen ist.
|
|
</para>
|
|
<para>
|
|
Beachten Sie auch, dass Sie <function>die</function> aufrufen
|
|
können, wenn es notwendig ist. Wenn die Fehlerbehandlungsfunktion
|
|
zurückkehrt, wird die Ausführung des Skripts beim nächsten Befehl
|
|
nach dem fehlerverursachenden Befehl fortgesetzt.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Falls Fehler auftreten, bevor das Skript ausgeführt wird (z. B.
|
|
bei Dateiuploads), kann eine benutzerdefinierte Fehlerbehandlung
|
|
nicht aufgerufen werden, weil sie zu diesem Zeitpunkt noch nicht
|
|
registriert ist.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Siehe auch <function>error_reporting</function>,
|
|
<function>restore_error_handler</function>,
|
|
<function>trigger_error</function>, und
|
|
<link linkend="errorfunc.constants">error level constants</link>.
|
|
</para>
|
|
</refsect1>
|
|
</refentry>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|