-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathexamples.xml
More file actions
146 lines (127 loc) · 4.78 KB
/
examples.xml
File metadata and controls
146 lines (127 loc) · 4.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: fa6e196973e45c0013c0801e01697757f4b98426 Maintainer: tihox Status: ready -->
<appendix xml:id="errorfunc.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<para>
Unten können wir ein Beispiel dafür sehen, wie die Fehlercode-Funktionen in PHP benutzt werden.
Wir definieren eine Fehlerfunktion, die die Information unter Verwendung des XML-Formates in einer
Datei speichert und diese per E-Mail dem Entwickler sendet, wenn ein schwerer Fehler in der Programmlogik auftritt.
<example>
<title>Fehlerbehandlung in einem Script</title>
<programlisting role="php">
<![CDATA[
<?php
// Wir werden unsere Fehler selbst behandeln
error_reporting(0);
// Benutzerdefinierte Fehlerfunktion
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
// Zeitstempel für den Fehlereintrag
$dt = date("Y-m-d H:i:s (T)");
// Definiert ein assoziatives Array für den Fehler
// Tatsächlich sollten wir nur
// E_WARNING, E_NOTICE, E_USER_ERROR,
// E_USER_WARNING und E_USER_NOTICE beachten.
$errortype = array (
E_ERROR => 'Fehler',
E_WARNING => 'Warnung',
E_PARSE => 'Parser-Fehler',
E_NOTICE => 'Hinweis',
E_CORE_ERROR => 'Kern-Fehler',
E_CORE_WARNING => 'Kern-Warnung',
E_COMPILE_ERROR => 'Kompilierungsfehler',
E_COMPILE_WARNING => 'Kompilierungswarnung',
E_USER_ERROR => 'Benutzerfehler',
E_USER_WARNING => 'Benutzerwarnung',
E_USER_NOTICE => 'Benutzerhinweis',
E_STRICT => 'Laufzeitwarnung',
E_RECOVERABLE_ERROR => 'Abfangbarer fataler Fehler'
);
// Satz von Fehlern für welche ein Eintrag gespeichert wird.
$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$err = "<errorentry>\n";
$err .= "\t<datetime>" . $dt . "</datetime>\n";
$err .= "\t<errornum>" . $errno . "</errornum>\n";
$err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n";
$err .= "\t<errormsg>" . $errmsg . "</errormsg>\n";
$err .= "\t<scriptname>" . $filename . "</scriptname>\n";
$err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n";
if (in_array($errno, $user_errors)) {
$err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variablen") . "</vartrace>\n";
}
$err .= "</errorentry>\n\n";
// Zum Test:
// echo $err;
// Speicher den Fehler im Log und schicke mir eine E-Mail falls es ein kritischer Benutzerfehler ist.
error_log($err, 3, "/usr/local/php4/error.log");
if ($errno == E_USER_ERROR) {
mail("[email protected]", "Critical User Error", $err);
}
}
function distance($vect1, $vect2)
{
if (!is_array($vect1) || !is_array($vect2)) {
trigger_error("Falsche Parameter, Arrays erwartet", E_USER_ERROR);
return NULL;
}
if (count($vect1) != count($vect2)) {
trigger_error("Die Vektoren müssen die selbe Dimension besitzen.", E_USER_ERROR);
return NULL;
}
for ($i=0; $i<count($vect1); $i++) {
$c1 = $vect1[$i]; $c2 = $vect2[$i];
$d = 0.0;
if (!is_numeric($c1)) {
trigger_error("Koordinate $i im Vektor 1 ist keine Nummer, verwende stattdessen Null.",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("Koordinate $i im Vektor 2 ist keine Nummer, verwende stattdessen Null",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$old_error_handler = set_error_handler("userErrorHandler");
//Undefinierte Konstante, generiert eine Warnung
$t = I_AM_NOT_DEFINED;
// Definiere einige "Vektoren"
$a = array(2, 3, "foo");
$b = array(5.5, 4.3, -1.6);
$c = array(1, -3);
// Benutzerfehler erzeugen
$t1 = distance($c, $b) . "\n";
// Einen weiteren Benutzerfehler erzeugen
$t2 = distance($b, "i am not an array") . "\n";
// Eine Warnung erzeugen
$t3 = distance($a, $b) . "\n";
?>
]]>
</programlisting>
</example>
</para>
</appendix>
<!-- 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:"~/.phpdoc/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
-->