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&oacute;digo (Parser 
Errors)</simpara></listitem>
-    <listitem><simpara>8 - Avisos (Notices, advertencia que puedes ignorar, pero que 
puede implicar
-    un error en tu c&oacute;digo.</simpara></listitem>
-   </itemizedlist></para>
-
-  <simpara>
-   Los 4 n&uacute;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&eacute;n puede ser configurado en el fichero 
de configuraci&oacute;n
-   del servidor de p&aacute;ginas Apache httpd.conf, con la directiva 
php3_error_reporting o tambi&eacute;n
-   se puede cambiar en tiempo de ejecuci&oacute;n usando la funci&oacute;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&oacute;n</entry>
+       <entry>Nota</entry>
+      </row>
+     </thead>
+     <tbody>
+      <row>
+       <entry>1</entry>
+       <entry>E_ERROR</entry>
+       <entry>errores fatales en tiempo de ejecuci&oacute;n</entry>
+       <entry></entry>
+      </row>
+      <row>
+       <entry>2</entry>
+       <entry>E_WARNING</entry>
+       <entry>advertencias en tiempo de ejecuci&oacute;n (no errores fatales)</entry>
+       <entry></entry>
+      </row>
+      <row>
+       <entry>4</entry>
+       <entry>E_PARSE</entry>
+       <entry>errores fatales en tiempo de compilaci&oacute;n</entry>
+       <entry></entry>
+      </row>
+      <row>
+       <entry>8</entry>
+       <entry>E_NOTICE</entry>
+       <entry>avisos en tiempo de ejecuci&oacute;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&oacute;n</entry>
+       <entry>solo en PHP 4</entry>
+      </row>
+      <row>
+       <entry>128</entry>
+       <entry>E_COMPILE_WARNING</entry>
+       <entry>advertencias en tiempo de compilaci&oacute;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&uacute;n lo 
+soportado</entry>
+       <entry></entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+  </para>
 
-   Todas las <link linkend="language.expressions">expresioness PHP</link> pueden 
tambi&eacute;n ser
+  <para>
+   Los valores indicados arriba (tanto numericos como simb&oacute;licos) son usados
+   para crear una m&aacute;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 &oacute; aplicar una 
+m&aacute;scara
+   a ciertos tipos de errores. Tener en cuenta que que solamente 
+   '|', '~', '!', y '&amp;' seran interpretados dentro de &php.ini; y que 
+ning&uacute;n
+   operador bitwise ser&aacute; 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 &amp; ~E_NOTICE</literal>, esto siginifica que todos los errores 
+y advertencias
+   que no pertenecen al nivel E_NOTICE, ser&aacute;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&oacute;n de PHP <filename>php3.ini</filename>, el valor de  
+   <link linkend="ini.error-reporting">error_reporting</link> debe ser 
+num&eacute;rico, por lo
+   tanto es <literal>7</literal>.
+  </para>
+  <para>
+   La configuraci&oacute;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&oacute;n desde el script PHP que se este ejecutando, usando la
+   funci&oacute;n <function>error_reporting</function>.
+  </para>
+  
+  <warning>
+   <para>
+    Cuando actualiceis c&oacute;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&uacute;n tipo de mensaje de error &oacute; donde buscar el fallo. 
+   </para>
+  </warning>
+    
+  <para>
+    Todas las <link linkend="language.expressions">expresioness PHP</link> pueden 
+tambi&eacute;n ser
    llamadas con el prefijo "@", el cual desactiva el aviso de errores para esa 
expresi&oacute;n en
    particular. Si ocurre un error en una expresi&oacute;n en tal situaci&oacute;n y 
la caracter&iacute;stica
    <link linkend="ini.track-errors">track_errors</link> est&aacute; habilitada, 
podr&aacute;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&aacute; 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&aacute; mensajes producidos por errores cr&iacute;ticos que 
+terminar&aacute;n 
+    la ejecuci&oacute;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&oacute;n, tanto si no est&aacute;
+    disponible como si contiene alg&uacute;n error, el script quedar&aacute;
+    interumpido sin ning&uacute;n tipo de indicaci&oacute;n de porque.
+   </para>
+  </warning>
+
+  <para>
+   A continuaci&oacute;n tenemos un ejemplo de como manejar errores en PHP. Definimos
+   una funci&oacute;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&iacute;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
 -->
+


Reply via email to