Estas son funciones que trabajan en la gestión de errores y
registros. Le permiten definir sus propias reglas de
gestión de errores, asi como modificar el modo en que los
errores son registrados. Esto le permite modificar y mejorar el
reporte de errores para que se adapte a sus necesidades.
Con las funciones de registro, puede enviar mensajes directamente
a otras máquinas, a un correo electrónico (¡o
correo electrónico a una puerta de enlace con un
buscapersonas!), a bitácoras del sistema, etc., de modo que
puede registrar y monitorear selectivamente las partes más
importantes de sus aplicaciones y sitios web.
Las funciones de reporte de errores le permiten personalizar el
nivel y tipo de retroalimentación de errores que PHP
entrega, desde noticias simples a funciones personalizadas
devueltas durante los errores.
En PHP 4 y PHP 5, el valor predeterminado es E_ALL &
~E_NOTICE. Este valor no muestra errores de nivel
E_NOTICE. Puede que usted quiera mostrarlos
durante su actividad de desarrollo.
Nota:
Al habilitar E_NOTICE durante el
desarrollo de software tiene algunos beneficios. Para
propósitos de depuración: los mensajes NOTICE le
advertirán sobre posibles fallos en su
código. Por ejemplo, se le advertirá sobre el uso
de valores no-asignados. Es extremadamente útil para
encontrar errores ortográficos y ahorrar tiempo de
depuración. Los mensajes NOTICE le advertirán
sobre el uso de un estilo incorrecto. Por ejemplo,
$matriz[item] está mejor escrito como $matriz['item'] ya
que PHP intenta darle a "item" un tratamiento de constante. Si
no es una constante, PHP asume que es un Ãndice de tipo
cadena para la matriz.
Este parámetro determina si los errores deben ser puestos
en pantalla como parte de la salida o si deben ser ocultados al
usuario.
Nota:
Es una caracterÃstica de apoyo para su proceso de
desarrollo y no deberÃa ser usada nunca en sistemas en
producción (p.ej. sistemas conectados a internet).
Nota:
Aunque display_errors puede ser definido en tiempo de
ejecución (con ini_set()), no
tendrá ningún efecto si el script contiene
errores fatales. Esto se debe a que la acción de tiempo
de ejecución deseada no se alcanza a ejecutar.
Indica si los mensajes de error de un script deben ser
registrados en la bitácora de errores del servidor o
error_log. Esta
opción es por lo tanto espocÃfica al servidor.
Nota:
Es altamente recomendable que use registro de errores en lugar
de despliegue de errores en sitios web en producción.
No registrar mensajes repetidos. Los errores repetidos deben
ocurrir en el mismo archivo, en la misma lÃnea hasta que
el parámetro ignore_repeated_source
sea establecido como true.
Ignorar la fuente de mensaje cuando se ignoran los mensajes
repetidos. Cuando este parámetro está encendido,
no se registrará errores con mensajes repetidos desde
diferentes fuentes de archivos.
Si este parámetro está apagado, entonces las fugas
de memoria no serán mostradas (en stdout o en el
registro). Este valor sólo tiene efecto en una
compilación de depuración, y si error_reporting incluye
E_WARNING en la lista permitida.
Permite deshabilitar las etiquetas HTML en los mensajes de
error. El nuevo formato para los errores en HTML produce
mensajes con enlaces que dirigen al usuario a una página
que describe el error o función que ha causado el
error. Estas referencias son afectadas por docref_root y docref_ext.
El nuevo formato de error contiene una referencia hacia una
página que describe el error o la función que ha
causado el error. En el caso de páginas de un manual,
usted puede descargar el manual en su idioma y establecer esta
directiva ini como la URL de su copia local. Si su copia local
del manual puede encontrarse bajo '/manual/' entonces puede usar
simplemente
docref_root=/manual/. Adicionalmente debe
establecer un valor de docref_ext que coincida con las
extensiones de archivo de su copia;
docref_ext=.html. Es posible usar
referencias externas. Por ejemplo, puede usar
docref_root=http://manual/en/ o
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F".
Por lo general usted querrá que el valor de docref_root
finalice con una barra '/'. Pero observe el segundo ejemplo
mencionado anteriormente, el cual no tiene una barra final, ni
la necesita.
Nota:
Esta es una caracterÃstica de apoyo para su desarrollo
ya que permite consultar la descripción de una
función fácilmente. Sin embargo, nunca debe ser
utilizada en sistemas en producción (p.ej. sistema
conectados a internet).
Si se habilita, esta opción hace que PHP genere una
advertencia cuando se utilice un operador más
(+) con cadenas. Esto facilita la labor de
encontrar scripts que necesitan ser reescritos para hacer uso
del concatenador de cadenas en su lugar (.).
Nota:
Es posible usar estos nombres de constantes en php.ini pero no
por fuera de PHP, como en httpd.conf, en donde deberÃa
usar los valores de máscara de bits en su lugar.
Errores fatales en tiempo de ejecución. Estos indican
errores de los que no es posible recuperarse, tales como
problemas de asignación de memoria. Se detiene la
ejecución del script.
Noticias de tiempo de ejecución. Habilite este valor para
hacer que PHP sugiera cambios en su código que
velarán por la mejor interoperabilidad y por mantener la
compatibilidad de su código.
A continuación podemos apreciar un ejemplo del uso de las
capacidades de gestión de errores que vienen con
PHP. Definimos una función de manipulación de errores
que registra la información en un archivo (usando un formato
XML), y envÃa un correo electrónico al desarrollador
en caso de que un error crÃtico en la lógica del
software ocurra.
Ejemplo 1. Uso de gestión de errores en un script
<?php // haremos nuestra propia manipulación de errores error_reporting(0);
// funcion de gestion de errores definida por el usuario function gestorDeErroresDeUsuario($num_err, $mens_err, $nombre_archivo, $num_linea, $vars) {
// marca de fecha/hora para el registro de error $dt = date("Y-m-d H:i:s (T)");
// definir una matriz asociativa de cadenas de error // en realidad las unicas entradas que deberiamos // considerar son E_WARNING, E_NOTICE, E_USER_ERROR, // E_USER_WARNING y E_USER_NOTICE
$tipo_error = array ( E_ERROR => "Error", E_WARNING => "Advertencia", E_PARSE => "Error de Intérprete", E_NOTICE => "Anotación", E_CORE_ERROR => "Error de Núcleo", E_CORE_WARNING => "Advertencia de Núcleo", E_COMPILE_ERROR => "Error de Compilación", E_COMPILE_WARNING => "Advertencia de Compilación", E_USER_ERROR => "Error de Usuario", E_USER_WARNING => "Advertencia de Usuario", E_USER_NOTICE => "Anotación de Usuario", E_STRICT => "Anotación de tiempo de ejecución" ); // conjunto de errores de los cuales se almacenara un rastreo $errores_de_usuario = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
// guardar en el registro de errores, y enviar un correo // electrónico si hay un error crítico de usuario error_log($err, 3, "/usr/local/php4/error.log"); if ($num_err == E_USER_ERROR) { mail("phpdev@example.com", "Error Crítico de Usuario", $err); } }
function distancia($vect1, $vect2) { if (!is_array($vect1) || !is_array($vect2)) { trigger_error("Parámetros incorrectos, se esperan matrices", E_USER_ERROR); return NULL; }
if (count($vect1) != count($vect2)) { trigger_error("Los vectores deben 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 en el 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 en el vector 2 no es un". "número, se usará cero", E_USER_WARNING); $c2 = 0.0; } $d += $c2*$c2 - $c1*$c1; } return sqrt($d); }
Atención técnica y comercial: (54)-11-5031-1111 las 24 hs. los 365 días del año. ToWebs, (c) 2008
Virtucom Networks S.A Av. Belgrano 1586, piso 10 (C1093AAQ) Cap. Fed. Bs. As, Argentina.