-
Notifications
You must be signed in to change notification settings - Fork 59
Expand file tree
/
Copy pathexamples.xml
More file actions
146 lines (128 loc) · 4.82 KB
/
examples.xml
File metadata and controls
146 lines (128 loc) · 4.82 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: chuso Status: ready -->
<appendix xml:id="errorfunc.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<para>
Abajo podemos ver un ejemplo del uso de las capacidades del manejo de errores de
PHP. Definimos una función de gestión de errores que registra la información en
un archivo (usado un foramto XML), y envía un e-mail a los desarrolladores en caso de que
suceda un error crítico en la lógica.
<example>
<title>Usar el manejo de errores en un script</title>
<programlisting role="php">
<![CDATA[
<?php
// haremos nuestro propio manejo de errores
error_reporting(0);
// función de gestión de errores definida por el usuario
function gestorErrores($númerr, $menserr, $nombrearchivo, $númlínea, $vars)
{
// marca de tiempo para la entrada del error
$fh = date("Y-m-d H:i:s (T)");
// definir una matriz asociativa de cadena de error
// en realidad las únicas entradas que deberíamos
// considerar son E_WARNING, E_NOTICE, E_USER_ERROR,
// E_USER_WARNING y E_USER_NOTICE
$tipoerror = array (
E_ERROR => 'Error',
E_WARNING => 'Warning',
E_PARSE => 'Parsing Error',
E_NOTICE => 'Notice',
E_CORE_ERROR => 'Core Error',
E_CORE_WARNING => 'Core Warning',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_USER_ERROR => 'User Error',
E_USER_WARNING => 'User Warning',
E_USER_NOTICE => 'User Notice',
E_STRICT => 'Runtime Notice',
E_RECOVERABLE_ERROR => 'Catchable Fatal Error'
);
// conjunto de errores por el cuál se guardará un seguimiento de una variable
$errores_usuario = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$err = "<errorentry>\n";
$err .= "\t<datetime>" . $fh . "</datetime>\n";
$err .= "\t<errornum>" . $númerr . "</errornum>\n";
$err .= "\t<errortype>" . $tipoerror[$númerr] . "</errortype>\n";
$err .= "\t<errormsg>" . $menserr . "</errormsg>\n";
$err .= "\t<scriptname>" . $nombrearchivo . "</scriptname>\n";
$err .= "\t<scriptlinenum>" . $númlínea . "</scriptlinenum>\n";
if (in_array($númerr, $errores_usuario)) {
$err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>\n";
}
$err .= "</errorentry>\n\n";
// para probar
// echo $err;
// guardar al registro de errores, y enviarme un e-mail si hay un error crítico de usuario
error_log($err, 3, "/usr/local/php4/error.log");
if ($númerr == E_USER_ERROR) {
mail("[email protected]", "Error Crítico de Usuario", $err);
}
}
function distancia($vect1, $vect2)
{
if (!is_array($vect1) || !is_array($vect2)) {
trigger_error("Parámetros incorrectos, se esperaba una matriz", E_USER_ERROR);
return NULL;
}
if (count($vect1) != count($vect2)) {
trigger_error("Los vectores necesitan ser del mismo tamaño", 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("La coordenada $i del vector 1 no es un número, se usará cero",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("La coordenada $i del vector 2 no es un número, se usará cero",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$gestor_error_antiguo = set_error_handler("gestorErrores");
// constante no definida, genera una advertencia
$t = NO_ESTOY_DEFINIDA;
// definir algunos "vectores"
$a = array(2, 3, "foo");
$b = array(5.5, 4.3, -1.6);
$c = array(1, -3);
// generar un error de usuario
$t1 = distancia($c, $b) . "\n";
// generar otro error de usuario
$t2 = distancia($b, "no soy una matriz") . "\n";
// generar una advertencia
$t3 = distancia($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
-->