-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathexamples.xml
More file actions
148 lines (129 loc) · 4.65 KB
/
examples.xml
File metadata and controls
148 lines (129 loc) · 4.65 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
147
148
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: fa6e196973e45c0013c0801e01697757f4b98426 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<appendix xml:id="errorfunc.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<para>
Ci-dessous, se trouve un exemple de gestion des erreurs par PHP.
Il y est défini un gestionnaire d'erreur, qui enregistre les informations
dans un fichier (au format XML), et envoie un courriel au développeur
si l'erreur est critique.
<example>
<title>Gestion d'erreurs avancées en PHP</title>
<programlisting role="php">
<![CDATA[
<?php
// Nous allons faire notre propre gestion
error_reporting(0);
// Fonction spéciale de gestion des erreurs
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
// Date et heure de l'erreur
$dt = date("Y-m-d H:i:s (T)");
// Définit un tableau associatif avec les chaînes d'erreur
// En fait, les seuls niveaux qui nous intéressent
// sont E_WARNING, E_NOTICE, E_USER_ERROR,
// E_USER_WARNING et E_USER_NOTICE
$errortype = array (
E_ERROR => 'Erreur',
E_WARNING => 'Alerte',
E_PARSE => 'Erreur d\'analyse',
E_NOTICE => 'Note',
E_CORE_ERROR => 'Erreur du noyau',
E_CORE_WARNING => 'Alerte du noyau',
E_COMPILE_ERROR => 'Erreur de compilation',
E_COMPILE_WARNING => 'Alerte de compilation',
E_USER_ERROR => 'Erreur spécifique',
E_USER_WARNING => 'Alerte spécifique',
E_USER_NOTICE => 'Note spécifique',
E_STRICT => 'Note d\'exécution',
E_RECOVERABLE_ERROR => 'Erreur fatale rattrapable'
);
// Les niveaux qui seront enregistrés
$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,"Variables")."</vartrace>\n";
}
$err .= "</errorentry>\n\n";
// pour tester
// echo $err;
// sauvegarde de l'erreur, et mail si c'est critique
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("Incorrect parameters, arrays expected", E_USER_ERROR);
return NULL;
}
if (count($vect1) != count($vect2)) {
trigger_error("Vectors need to be of the same size", 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("Coordinate $i in vector 1 is not a number, using zero",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("Coordinate $i in vector 2 is not a number, using zero",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$old_error_handler = set_error_handler("userErrorHandler");
// constante non définie, qui génère une alerte
$t = I_AM_NOT_DEFINED;
// définition de quelques vecteurs
$a = array (2, 3, "foo");
$b = array (5.5, 4.3, -1.6);
$c = array (1, -3);
// génère une erreur utilisateur
$t1 = distance ($c, $b)."\n";
// génère une erreur utilisateur
$t2 = distance ($b, "i am not an array")."\n";
// Génère une alerte
$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
-->