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
-->
+