rafael Mon May 27 17:49:41 2002 EDT Modified files: /phpdoc-es/features error-handling.xml Log: Translation updated to PHP 4.x
Index: phpdoc-es/features/error-handling.xml diff -u phpdoc-es/features/error-handling.xml:1.4 phpdoc-es/features/error-handling.xml:1.5 --- phpdoc-es/features/error-handling.xml:1.4 Wed Dec 12 15:47:53 2001 +++ phpdoc-es/features/error-handling.xml Mon May 27 17:49:40 2002 @@ -1,35 +1,290 @@ <?xml version="1.0" encoding="iso-8859-1"?> +<!-- $Revision: 1.5 $ --> <chapter id="features.error-handling"> - <title>Manejando errores</title> - + <title>Manjando errores</title> + <para> - Hay 4 tipos de errores y avisos en PHP. Esto son: - - <itemizedlist> - <listitem><simpara>1 - Errores Normales de Funciones (Normal Function Errors)</simpara></listitem> - <listitem><simpara>2 - Avisos Normales (Normal Warnings)</simpara></listitem> - <listitem><simpara>4 - Errores del Analizador de código (Parser Errors)</simpara></listitem> - <listitem><simpara>8 - Avisos (Notices, advertencia que puedes ignorar, pero que puede implicar - un error en tu código.</simpara></listitem> - </itemizedlist></para> - - <simpara> - Los 4 números de arriba son sumados para definir un nivel de aviso de error. - El nivel de aviso de error por defecto es el nivel 7, el cual es la suma de 1+2+4, es - decir todo excepto los avisos. Este nivel puede ser cambiado en el fichero php3.ini con - la directiva error_reporting. También puede ser configurado en el fichero de configuración - del servidor de páginas Apache httpd.conf, con la directiva php3_error_reporting o también - se puede cambiar en tiempo de ejecución usando la función <function>error_reporting - </function>.</simpara> + Existen diferentes tipos de errores y advertencias en PHP. Son los siguientes: - - <simpara> + <table> + <title>Tipos de error PHP</title> + <tgroup cols="4"> + <thead> + <row> + <entry>Valor</entry> + <entry>Constante</entry> + <entry>Descripción</entry> + <entry>Nota</entry> + </row> + </thead> + <tbody> + <row> + <entry>1</entry> + <entry>E_ERROR</entry> + <entry>errores fatales en tiempo de ejecución</entry> + <entry></entry> + </row> + <row> + <entry>2</entry> + <entry>E_WARNING</entry> + <entry>advertencias en tiempo de ejecución (no errores fatales)</entry> + <entry></entry> + </row> + <row> + <entry>4</entry> + <entry>E_PARSE</entry> + <entry>errores fatales en tiempo de compilación</entry> + <entry></entry> + </row> + <row> + <entry>8</entry> + <entry>E_NOTICE</entry> + <entry>avisos en tiempo de ejecución (no tan importante como una +advertencia)</entry> + <entry></entry> + </row> + <row> + <entry>16</entry> + <entry>E_CORE_ERROR</entry> + <entry>errores fatales que ocurren durante el proceso inicial de arranque de +PHP</entry> + <entry>Solo en PHP 4</entry> + </row> + <row> + <entry>32</entry> + <entry>E_CORE_WARNING</entry> + <entry>advertencias fatales que ocurren durante el proceso inicial de arranque +de PHP</entry> + <entry>Solo en PHP 4</entry> + </row> + <row> + <entry>64</entry> + <entry>E_COMPILE_ERROR</entry> + <entry>errores fatales en tiempo de compilación</entry> + <entry>solo en PHP 4</entry> + </row> + <row> + <entry>128</entry> + <entry>E_COMPILE_WARNING</entry> + <entry>advertencias en tiempo de compilación (no errores +fatales)</entry> + <entry>Solo en PHP 4</entry> + </row> + <row> + <entry>256</entry> + <entry>E_USER_ERROR</entry> + <entry>mensaje de error generado por el usuario</entry> + <entry>Solo en PHP 4</entry> + </row> + <row> + <entry>512</entry> + <entry>E_USER_WARNING</entry> + <entry>mensaje de advertencia generado por el usuario</entry> + <entry>solo en PHP 4</entry> + </row> + <row> + <entry>1024</entry> + <entry>E_USER_NOTICE </entry> + <entry>mensaje de aviso generado por el usuario</entry> + <entry>Solo en PHP 4</entry> + </row> + <row> + <entry></entry> + <entry>E_ALL</entry> + <entry>todos los anteriores, all of the above, según lo +soportado</entry> + <entry></entry> + </row> + </tbody> + </tgroup> + </table> + </para> - Todas las <link linkend="language.expressions">expresioness PHP</link> pueden también ser + <para> + Los valores indicados arriba (tanto numericos como simbólicos) son usados + para crear una máscara de bits (bitmask) que especifica de los errores que + hay que informar. Podeis usar los <link linkend="language.operators.bitwise"> + operadores bitwise</link> para combinar estos valores ó aplicar una +máscara + a ciertos tipos de errores. Tener en cuenta que que solamente + '|', '~', '!', y '&' seran interpretados dentro de &php.ini; y que +ningún + operador bitwise será interpretado dentro de <filename>php3.ini</filename>. + </para> + <para> + En PHP 4, el valor por defecto de <link +linkend="ini.error-reporting">error_reporting</link> + es <literal>E_ALL & ~E_NOTICE</literal>, esto siginifica que todos los errores +y advertencias + que no pertenecen al nivel E_NOTICE, serán presentados cuando ocurran. En +PHP 3, el + valor por defecto es <literal>(E_ERROR | E_WARNING | E_PARSE)</literal>, teniendo + el mismo significado. Tener en cuenta que al no soportar constantes en el + fichero de configuración de PHP <filename>php3.ini</filename>, el valor de + <link linkend="ini.error-reporting">error_reporting</link> debe ser +numérico, por lo + tanto es <literal>7</literal>. + </para> + <para> + La configuración inicial puede cambiarse, en el fichero ini con + la directiva <link linkend="ini.error-reporting">error_reporting</link>, + en el fichero <filename>httpd.conf</filename> de Apache con la directiva + php_error_reporting (php3_error_reporting en PHP 3) y finalmente en tiempo + de ejecución desde el script PHP que se este ejecutando, usando la + función <function>error_reporting</function>. + </para> + + <warning> + <para> + Cuando actualiceis código o servidores de PHP 3 a PHP 4, deberiais + comprobar los valores y llamadas a <function>error_reporting</function> + para no deshabilitar los nuevos tipos de mensajes de error, especialmente + E_COMPILE_ERROR. Si esto ocurriese podriais obtener documentos vacios + sin ningún tipo de mensaje de error ó donde buscar el fallo. + </para> + </warning> + + <para> + Todas las <link linkend="language.expressions">expresioness PHP</link> pueden +también ser llamadas con el prefijo "@", el cual desactiva el aviso de errores para esa expresión en particular. Si ocurre un error en una expresión en tal situación y la característica <link linkend="ini.track-errors">track_errors</link> está habilitada, podrás encontrar el - mensaje de error en la variable global $php_errormsg.</simpara> + mensaje de error en la variable global <literal>$php_errormsg</literal>. + </para> + + <note> + <para> + El <link linkend="language.operators.errorcontrol">operador de control de errores +@</link> no + desactivará mensajes producidos por errores en el parseador. + </para> + </note> + + <warning> + <para> + Actualmente el <link linkend="language.operators.errorcontrol">operador de +control de errores @</link> + incluso desactivará mensajes producidos por errores críticos que +terminarán + la ejecución del script. Entre otras cosas, esto significa que si + utilizais <link linkend="language.operators.errorcontrol">@</link> para + suprimir mensajes de error de alguna función, tanto si no está + disponible como si contiene algún error, el script quedará + interumpido sin ningún tipo de indicación de porque. + </para> + </warning> + + <para> + A continuación tenemos un ejemplo de como manejar errores en PHP. Definimos + una función de manejo de errores, la cual registra el error en un fichero + (usando el formato XML) y manda un e-mail al programador si un error crítico + ocurre. + <example> + <title>Usando el manejo de errores en un script</title> + <programlisting role="php"> +<![CDATA[ +<?php +// Los errores los manejamos nosotros +error_reporting(0); + +// funcion de manejos de errores definida por el usuario +function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) { + // timestamp for the error entry + $dt = date("Y-m-d H:i:s (T)"); + + // Define una array con los valores de errores + // en realidad solamente deberiamos de tener + // en cuenta los valores 2,8,256,512 y 1024 + + $errortype = array ( + 1 => "Error", + 2 => "Warning", + 4 => "Parsing Error", + 8 => "Notice", + 16 => "Core Error", + 32 => "Core Warning", + 64 => "Compile Error", + 128 => "Compile Warning", + 256 => "User Error", + 512 => "User Warning", + 1024=> "User Notice" + ); + + // errores a tener en cuenta + $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"; + + // Para comprobar + // echo $err; + + // grabar en el fichero de errores y mandar un e-mail si ocurre un error critico +de usuario + 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 no definida, genera una advertencia +$t = I_AM_NOT_DEFINED; + +// definimos algunos vectores +$a = array(2,3,"foo"); +$b = array(5.5, 4.3, -1.6); +$c = array (1,-3); + +// genera un error de usuario +$t1 = distance($c,$b)."\n"; + +// genera otro error de usuario +$t2 = distance($b,"i am not an array")."\n"; + +// genera una advertencia +$t3 = distance($a,$b)."\n"; + +?> +]]> + </programlisting> + </example> + Este es un ejemplo simple que muestra como utilizar + las <link linkend="ref.errorfunc">funciones de manejo de errores y registro</link>. + </para> + + <para> + Consultar tambien<function>error_reporting</function>, + <function>error_log</function>, + <function>set_error_handler</function>, + <function>restore_error_handler</function>, + <function>trigger_error</function>, + <function>user_error</function> + </para> </chapter> @@ -44,9 +299,13 @@ sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil -sgml-default-dtd-file:"../manual.ced" +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 --> +