setembro 17th, 2007 Luis Filipe Costa Carvalho
Depois que um sistema é produzido ele vai para o ambiente de testes e, nem sempre, todas as possibilidades são testadas e todas as falhas são descobertas. Alguns erros passam daqui, outros dali e o site vai para um ambiente real funcionando 90%. É muito difícil um site sair da produção sem nenhuma falha. Mas ai esta a questão. Se ele der erro em ambiente real, como ficar sabendo?
Provavelmente pensando nisso o pessoal da Zend implementou a função set_error_handler, que serve para tratar erros gerados em tempo de execução.
Por exemplo, se você usar uma variável que não existe ou dividir um número por zero esta função será chamada e você trata o erro da forma que achar melhor.
Nos sites que eu desenvolvo normalmente eu uso esta função para tratar os erros:
set_error_handler('trataErro');
function trataErro($msg,$errno,$errstr,$errfile,$errline) {
$msg ="<pre>
\nErro....: [$errno] - $errstr
\nDate....: ".date("d/m/Y H:i:s") . "
\nFile....: <b>$errfile</b> : <b>$errline</b>\n
</pre>
<h2>Roll Back: </h2$gt;";
$trace = debug_backtrace(); //pegando o backtrace da execução
foreach ($trace as $k=>$v) {
if ($v['function'] == "trataErro") continue;
$msg .= "<ul><li>Função: <b style=\" color: green\">" . $v['function'] . "</b></li></ul>
<ol>File: " . $v['file'] ."</ol>
<ol>Linha: " . $v['line'] ."</ol>";
if (isset($v['args'])) {
$msg .= "Argumentos:<ul>";
foreach ($v['args'] as $a) {
$msg .= "<li>$a</li>";
}
$msg .= "</ul>";
}
}
ob_start(); //ligando buffer de saida
echo "<h1> Variáveis Globais </h1>";
echo "<h2> _SERVER </h2>";
echo "<pre>\n";print_r($_SERVER);echo"</pre>";
echo "<h2> _POST </h2>";
echo "<pre>\n";print_r($_POST);echo"</pre>";
echo "<h2> _GET </h2>";
echo "<pre>\n";print_r($_GET);echo"</pre>";
$msg .= ob_get_contents(); //pegando o conteúdo do buffer de saida
ob_end_clean(); //limpando o buffer de saida
echo $msg;
die; //Se algum erro existir ele aborta a execução do script
}
Depois de gerada a mensagem, se o site estiver em ambiente real ele mostra uma mensagem falando sobre o erro e pedindo desculpas e se estiver em ambiente de teste ele mostra o erro da forma como eu organizei na função.
O uso deste tipo de função é simples e trás grandes ganhos para os programadores que conseguem ter um feedback de como esta o código do site.
Comentários Recenter