0

Manipulando erros em tempo de execução

criado por Álvaro Silva em 29/07/2010 5:58pm
Quando ocorre algum erro no código PHP, dependedo do error_reporting (http://br.php.net/manual/pt_BR/function.error-reporting.php), será impresso na tela mensagens pouco agradáveis para um usuário comum.

Utilizaremos a função set_error_handler do PHP (PHP 4 >= 4.0.1, PHP 5), para atribuirmos a uma função criada pelo desenvolvedor a responsabilidade de gerenciar as informações de erro.

A função do PHP:
mixed set_error_handler ( callback $error_handler [, int $error_types ] )

Como primeiro parâmetro informaremos o nome da função de callback que será chamada toda vez que um erro for gerado.

Esta função ao ser executada receberá os seguintes parâmetros:

Nível (integer): Nível de erro que aconteceu.

Mensagem (string): Mensagem de erro.

Arquivo (string): Nome do arquivo no qual o erro ocorreu.

Linha (integer): Número da linha na qual o erro ocorreu.

Contexto (string): É opcional e é uma matriz que aponta para a tabela de símbolos ativos no ponto aonde o erro ocorreu. Em outras palavras, irá conter uma matriz de cada váriavel que exista no escopo aonde o erro aconteceu. O manipulador de erro do usuário não deve modificar o contexto de erro.

Vamos a um exemplo:
function trataErros($iNrNivelErro, $sMsgErro, $sArqErro, $iNrLinhaErro)
{
  switch (iNrNivelErro) {

    case E_USER_ERROR:

      // Tratando cada tipo de erro
      break;

    case E_USER_WARNING:
      // Tratando cada tipo de erro
      break;

  }
} 

set_error_handler('trataErros');

Agora você pode determinar o comportamento para cada tipo de erro.

Pode se optar por apenas informar ao usuário que um erro foi gerado, mas a maior parte das informações técnicas, armazenar em um arquivo de Log no servidor.

Obs: Para que este tratamento seja aplicado em seu site ou sistema, deve ser feito em um arquivo o qual será incluido em todos os outros arquivos onde se necessita a manipulação de erros. Ex.: include_once('arqtrataerros.php').

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)