Manejo de Erros PHP
- Página Anterior E-mail Seguro PHP
- Próxima Página Exception PHP
No PHP, o tratamento de erros padrão é simples. Uma mensagem é enviada para o navegador, esta mensagem contém o nome do arquivo, o número da linha e uma descrição do erro.
Manejo de Erros PHP
Ao criar scripts e aplicações web, o tratamento de erros é uma parte importante. Se seu código falta a codificação de deteção de erros, o programa parece pouco profissional e abre portas para riscos de segurança.
Este tutorial introduz algumas das técnicas mais importantes de deteção de erros no PHP.
Vamos explicar diferentes métodos de tratamento de erros para você:
- Sintaxe simples "die()"
- Erros personalizados e gatilhos de erro
- Relatório de erro
Tratamento básico de erros: usando a função die()
O primeiro exemplo mostra um script simples para abrir um arquivo de texto:
<?php $file=fopen("welcome.txt","r"); ?>
Se o arquivo não existir, você receberá um erro semelhante a este:
Aviso: fopen(welcome.txt) [function.fopen]: falha ao abrir fluxo: Nenhum arquivo ou diretório encontrado em C:\webfolder\test.php na linha 2
Para evitar que o usuário receba uma mensagem de erro semelhante à acima, detectamos a existência do arquivo antes de acessá-lo:
<?php if(!file_exists("welcome.txt")) { die("Arquivo não encontrado"); } else { $file=fopen("welcome.txt","r"); } ?>
Agora, se o arquivo não existir, você receberá uma mensagem de erro semelhante a esta:
Arquivo não encontrado
Em comparação com o código anterior, o código acima é mais eficiente, pois ele adota um mecanismo simples de tratamento de erros para interromper o script após o erro.
No entanto, simplesmente interromper o script não é sempre a maneira correta. Vamos estudar as funções alternativas do PHP usadas para lidar com erros.
Criar gerenciador de erro personalizado
Criar um gerenciador de erro personalizado é muito simples. Nós simplesmente criamos uma função dedicada que pode ser chamada quando ocorrer um erro no PHP.
Esta função deve ser capaz de lidar pelo menos com dois parâmetros (nível de erro e mensagem de erro), mas pode aceitar até cinco parâmetros (opcionais: arquivo, número da linha e contexto de erro):
Sintaxe
error_function(error_level, error_message, error_file, error_line, error_context)
Parâmetro | Descrição |
---|---|
error_level | Obrigatório. Nível de relatório de erro definido pelo usuário para erro. Deve ser um valor numérico. Veja a tabela abaixo: Nível de relatório de erro. |
error_message | Obrigatório. Regra de mensagem de erro definida pelo usuário para erro. |
error_file | Opcional. Especifica o nome do arquivo onde o erro ocorreu. |
error_line | Opcional. Especifica o número da linha onde o erro ocorreu. |
error_context | Opcional. Especifica um array que contém cada variável usada no momento do erro e seus valores. |
Níveis de relatório de erro
Esses níveis de relatório de erro são diferentes tipos de erros que o manipulador de erros está destinado a lidar:
Valor | Constante | Descrição |
---|---|---|
2 | E_WARNING | Erros de tempo de execução não fatais. Não interrompe a execução do script. |
8 | E_NOTICE | Notificações de tempo de execução. O script descobre que pode haver erros, mas também pode ocorrer enquanto o script está executando normalmente. |
256 | E_USER_ERROR | Erros gerados pelo usuário fatais. Semelhantes às E_ERROR definidas pelo programador usando a função PHP trigger_error(). |
512 | E_USER_WARNING | Avisos gerados pelo usuário não fatais. Semelhantes às E_WARNING definidas pelo programador usando a função PHP trigger_error(). |
1024 | E_USER_NOTICE | Notificações geradas pelo usuário. Semelhantes às E_NOTICE definidas pelo programador usando a função PHP trigger_error(). |
4096 | E_RECOVERABLE_ERROR | Erros fatais capturáveis. Semelhantes a E_ERROR, mas podem ser capturados por manipuladores de erros definidos pelo usuário. (Ver set_error_handler()) |
8191 | E_ALL | Todos os erros e avisos, exceto o nível E_STRICT. (No PHP 6.0, E_STRICT é parte de E_ALL) |
Agora, vamos criar uma função para lidar com erros:
function customError($errno, $errstr) { echo "<b>Erro:</b> [$errno] $errstr<br />"; echo "Fim do Script"; die(); }
O código acima é uma função de manipulação de erros simples. Quando acionada, ela obtém o nível de erro e a mensagem de erro. Em seguida, ela imprime o nível de erro e a mensagem e termina o script.
Agora que já criamos uma função de manipulação de erros, precisamos determinar quando acionar essa função.
Definir Manipulador de Erros
O manipulador de erros padrão do PHP é o manipulador de erros integrado. Pretendemos transformar a função acima em o manipulador de erros padrão durante a execução do script.
Pode-se modificar o manipulador de erros para que ele se aplique apenas a certos erros, permitindo que o script trate diferentes erros de maneiras diferentes. No entanto, neste exemplo, pretendemos usar nosso manipulador de erros personalizado para todos os erros:
set_error_handler("customError");
Aqui está o exemplo de um JSON traduzido para o português do Brasil:
Exemplo
Para testar este manipulador de erro, vamos tentar imprimir uma variável inexistente:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Erro:</b> [$errno] $errstr"; } //set error handler set_error_handler("customError"); //trigger error echo($test); ?>
A saída do código acima deve ser semelhante a isso:
Erro: [8] Variável não definida: test
Ação de acionar erro
Em locais onde o usuário insere dados no script, é útil acionar erros quando a entrada do usuário é inválida. No PHP, essa tarefa é realizada pelo trigger_error().
Exemplo
Neste exemplo, se a variável "test" for maior que "1", ocorrerá um erro:
<?php $test=2; if ($test>1) { trigger_error("O valor deve ser 1 ou abaixo"); } ?>
A saída do código acima deve ser semelhante a isso:
Aviso: O valor deve ser 1 ou abaixo em C:\webfolder\test.php na linha 6
Você pode acionar erros em qualquer lugar do script, usando o segundo parâmetro, você pode especificar o nível do erro acionado.
Tipos de erros possíveis:
- E_USER_ERROR - Erro de tempo de execução gerado pelo usuário fatal. O erro não pode ser recuperado. A execução do script é interrompida.
- E_USER_WARNING - Aviso de tempo de execução gerado pelo usuário não fatal. A execução do script não é interrompida.
- E_USER_NOTICE - Padrão. Notificações de tempo de execução geradas pelo usuário. O script encontrou possíveis erros, que também podem ocorrer quando o script estiver executando normalmente.
Exemplo
Neste exemplo, se a variável "test" for maior que "1", ocorrerá um erro E_USER_WARNING. Se ocorrer um E_USER_WARNING, usaremos nosso manipulador de erro personalizado e encerraremos o script:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Erro:</b> [$errno] $errstr<br />"; echo "Fim do Script"; die(); } //set error handler set_error_handler("customError", E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("O valor deve ser 1 ou abaixo", E_USER_WARNING); } ?>
A saída do código acima deve ser semelhante a isso:
Erro: [512] O valor deve ser 1 ou abaixo Fim do Script
Agora que já aprendemos como criar nossos próprios erros e como acioná-los, vamos estudar a questão dos registros de erro.
Registros de erro
Por padrão, com base na configuração de error_log no php.ini, o PHP envia registros de erro para o sistema de logs de erro do servidor ou para um arquivo. Ao usar a função error_log(), você pode enviar registros de erro para um arquivo ou destino remoto especificado.
Enviar mensagens de erro para si mesmo por e-mail é uma boa maneira de obter notificações de erros específicos.
Enviar mensagens de erro através de E-Mail
Neste exemplo, se um erro específico ocorrer, enviaremos um e-mail com a mensagem de erro e encerraremos o script:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Erro:</b> [$errno] $errstr<br />"; echo "Webmaster has been notified"; error_log("Erro: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } //set error handler set_error_handler("customError", E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("O valor deve ser 1 ou abaixo", E_USER_WARNING); } ?>
A saída do código acima deve ser semelhante a isso:
Erro: [512] O valor deve ser 1 ou abaixo O webmaster foi notificado
Os e-mails recebidos a partir do código acima são semelhantes a isso:
Erro: [512] O valor deve ser 1 ou abaixo
Este método não é adequado para todos os erros. Erros comuns devem ser registrados no servidor usando o sistema de registro padrão do PHP.
- Página Anterior E-mail Seguro PHP
- Próxima Página Exception PHP