<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.errorfunc.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'errorfunc.examples.php',
    1 => 'Ejemplos',
    2 => 'Ejemplos',
  ),
  'up' => 
  array (
    0 => 'book.errorfunc.php',
    1 => 'Manejo de errores',
  ),
  'prev' => 
  array (
    0 => 'errorfunc.constants.php',
    1 => 'Constantes predefinidas',
  ),
  'next' => 
  array (
    0 => 'ref.errorfunc.php',
    1 => 'Funciones de Manejo de Errores',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/errorfunc/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="errorfunc.examples" class="appendix">
 <h1 class="title">Ejemplos</h1>

  <p class="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.
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Usar el manejo de errores en un script</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// haremos nuestro propio manejo de errores<br /></span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// función de gestión de errores definida por el usuario<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">gestorErrores</span><span style="color: #007700">(</span><span style="color: #0000BB">$númerr</span><span style="color: #007700">, </span><span style="color: #0000BB">$menserr</span><span style="color: #007700">, </span><span style="color: #0000BB">$nombrearchivo</span><span style="color: #007700">, </span><span style="color: #0000BB">$númlínea</span><span style="color: #007700">, </span><span style="color: #0000BB">$vars</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #FF8000">// marca de tiempo para la entrada del error<br />    </span><span style="color: #0000BB">$fh </span><span style="color: #007700">= </span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">"Y-m-d H:i:s (T)"</span><span style="color: #007700">);<br /><br />    </span><span style="color: #FF8000">// definir una matriz asociativa de cadena de error<br />    // en realidad las únicas entradas que deberíamos<br />    // considerar son E_WARNING, E_NOTICE, E_USER_ERROR,<br />    // E_USER_WARNING y E_USER_NOTICE<br />    </span><span style="color: #0000BB">$tipoerror </span><span style="color: #007700">= array (<br />                </span><span style="color: #0000BB">E_ERROR              </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Error'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_WARNING            </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Warning'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_PARSE              </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Parsing Error'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_NOTICE             </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Notice'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_CORE_ERROR         </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Core Error'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_CORE_WARNING       </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Core Warning'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_COMPILE_ERROR      </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Compile Error'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_COMPILE_WARNING    </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Compile Warning'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_USER_ERROR         </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'User Error'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_USER_WARNING       </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'User Warning'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_USER_NOTICE        </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'User Notice'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_STRICT             </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Runtime Notice'</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">E_RECOVERABLE_ERROR  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Catchable Fatal Error'<br />                </span><span style="color: #007700">);<br />    </span><span style="color: #FF8000">// conjunto de errores por el cuál se guardará un seguimiento de una variable<br />    </span><span style="color: #0000BB">$errores_usuario </span><span style="color: #007700">= array(</span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">);<br /><br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">= </span><span style="color: #DD0000">"&lt;errorentry&gt;\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;datetime&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">$fh </span><span style="color: #007700">. </span><span style="color: #DD0000">"&lt;/datetime&gt;\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;errornum&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">$númerr </span><span style="color: #007700">. </span><span style="color: #DD0000">"&lt;/errornum&gt;\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;errortype&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">$tipoerror</span><span style="color: #007700">[</span><span style="color: #0000BB">$númerr</span><span style="color: #007700">] . </span><span style="color: #DD0000">"&lt;/errortype&gt;\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;errormsg&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">$menserr </span><span style="color: #007700">. </span><span style="color: #DD0000">"&lt;/errormsg&gt;\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;scriptname&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">$nombrearchivo </span><span style="color: #007700">. </span><span style="color: #DD0000">"&lt;/scriptname&gt;\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;scriptlinenum&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">$númlínea </span><span style="color: #007700">. </span><span style="color: #DD0000">"&lt;/scriptlinenum&gt;\n"</span><span style="color: #007700">;<br /><br />    if (</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$númerr</span><span style="color: #007700">, </span><span style="color: #0000BB">$errores_usuario</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"\t&lt;vartrace&gt;" </span><span style="color: #007700">. </span><span style="color: #0000BB">wddx_serialize_value</span><span style="color: #007700">(</span><span style="color: #0000BB">$vars</span><span style="color: #007700">, </span><span style="color: #DD0000">"Variables"</span><span style="color: #007700">) . </span><span style="color: #DD0000">"&lt;/vartrace&gt;\n"</span><span style="color: #007700">;<br />    }<br />    </span><span style="color: #0000BB">$err </span><span style="color: #007700">.= </span><span style="color: #DD0000">"&lt;/errorentry&gt;\n\n"</span><span style="color: #007700">;<br /><br />    </span><span style="color: #FF8000">// para probar<br />    // echo $err;<br /><br />    // guardar al registro de errores, y enviarme un e-mail si hay un error crítico de usuario<br />    </span><span style="color: #0000BB">error_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$err</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #DD0000">"/usr/local/php4/error.log"</span><span style="color: #007700">);<br />    if (</span><span style="color: #0000BB">$númerr </span><span style="color: #007700">== </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">mail</span><span style="color: #007700">(</span><span style="color: #DD0000">"phpdev@example.com"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Error Crítico de Usuario"</span><span style="color: #007700">, </span><span style="color: #0000BB">$err</span><span style="color: #007700">);<br />    }<br />}<br /><br /><br />function </span><span style="color: #0000BB">distancia</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect1</span><span style="color: #007700">, </span><span style="color: #0000BB">$vect2</span><span style="color: #007700">)<br />{<br />    if (!</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect1</span><span style="color: #007700">) || !</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect2</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"Parámetros incorrectos, se esperaba una matriz"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">);<br />        return </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br />    }<br /><br />    if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect1</span><span style="color: #007700">) != </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect2</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"Los vectores necesitan ser del mismo tamaño"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">);<br />        return </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br />    }<br /><br />    for (</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect1</span><span style="color: #007700">); </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {<br />        </span><span style="color: #0000BB">$c1 </span><span style="color: #007700">= </span><span style="color: #0000BB">$vect1</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]; </span><span style="color: #0000BB">$c2 </span><span style="color: #007700">= </span><span style="color: #0000BB">$vect2</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">0.0</span><span style="color: #007700">;<br />        if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$c1</span><span style="color: #007700">)) {<br />            </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"La coordenada </span><span style="color: #0000BB">$i</span><span style="color: #DD0000"> del vector 1 no es un número, se usará cero"</span><span style="color: #007700">,<br />                            </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">);<br />            </span><span style="color: #0000BB">$c1 </span><span style="color: #007700">= </span><span style="color: #0000BB">0.0</span><span style="color: #007700">;<br />        }<br />        if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$c2</span><span style="color: #007700">)) {<br />            </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"La coordenada </span><span style="color: #0000BB">$i</span><span style="color: #DD0000"> del vector 2 no es un número, se usará cero"</span><span style="color: #007700">,<br />                            </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">);<br />            </span><span style="color: #0000BB">$c2 </span><span style="color: #007700">= </span><span style="color: #0000BB">0.0</span><span style="color: #007700">;<br />        }<br />        </span><span style="color: #0000BB">$d </span><span style="color: #007700">+= </span><span style="color: #0000BB">$c2</span><span style="color: #007700">*</span><span style="color: #0000BB">$c2 </span><span style="color: #007700">- </span><span style="color: #0000BB">$c1</span><span style="color: #007700">*</span><span style="color: #0000BB">$c1</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">sqrt</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$gestor_error_antiguo </span><span style="color: #007700">= </span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">"gestorErrores"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// constante no definida, genera una advertencia<br /></span><span style="color: #0000BB">$t </span><span style="color: #007700">= </span><span style="color: #0000BB">NO_ESTOY_DEFINIDA</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// definir algunos "vectores"<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= array(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= array(</span><span style="color: #0000BB">5.5</span><span style="color: #007700">, </span><span style="color: #0000BB">4.3</span><span style="color: #007700">, -</span><span style="color: #0000BB">1.6</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1</span><span style="color: #007700">, -</span><span style="color: #0000BB">3</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// generar un error de usuario<br /></span><span style="color: #0000BB">$t1 </span><span style="color: #007700">= </span><span style="color: #0000BB">distancia</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// generar otro error de usuario<br /></span><span style="color: #0000BB">$t2 </span><span style="color: #007700">= </span><span style="color: #0000BB">distancia</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #DD0000">"no soy una matriz"</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// generar una advertencia<br /></span><span style="color: #0000BB">$t3 </span><span style="color: #007700">= </span><span style="color: #0000BB">distancia</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
</div>
<?php manual_footer($setup); ?>