tutoriais mais recente desenvolvimento web
 

PHP Tratamento de erros


O tratamento de erro padrão no PHP é muito simples. Uma mensagem de erro com o nome do arquivo, número da linha e uma mensagem descrevendo o erro é enviado para o browser.


PHP Tratamento de erros

Ao criar scripts e aplicações web, tratamento de erros é uma parte importante. Se o seu código não tem código de verificação de erros, o programa pode parecer muito pouco profissional e você pode ser aberto a riscos de segurança.

Este tutorial contém alguns dos erros mais comuns métodos em PHP verificando.

Vamos mostrar diferentes métodos de manipulação de erro:

  • Simples " die() " declarações
  • erros personalizados e gatilhos de erro
  • relatório de erros

Usando o: Básico Tratamento de erros die() função

O primeiro exemplo mostra um script simples que abre um arquivo de texto:

<?php
$file=fopen("welcome.txt","r");
?>

Se o arquivo não existir, você pode obter um erro como este:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

Para evitar que o usuário recebendo uma mensagem de erro como o descrito acima, testamos se o arquivo existe antes de tentar acessá-lo:

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

Agora, se o arquivo não existir você receber um erro como este:

File not found

O código acima é mais eficiente que o código anterior, porque ele usa um mecanismo de tratamento de erros simples para parar o script após o erro.

No entanto, basta parar o script nem sempre é o caminho certo a seguir. Vamos dar uma olhada em funções PHP alternativas para tratamento de erros.


Criando um identificador de erro personalizada

Criando um manipulador de erro personalizada é bastante simples. Nós simplesmente criar uma função especial que pode ser chamado quando ocorre um erro no PHP.

Esta função deve ser capaz de lidar com um mínimo de dois parâmetros (nível de erro e mensagem de erro), mas pode aceitar até cinco parâmetros (optionally: file, line-number, and the error context) :

Sintaxe

error_function(error_level,error_message,
error_file,error_line,error_context)
Parâmetro Descrição
error_level Requeridos. Especifica o nível de relatório de erro para o erro definido pelo usuário. Deve ser um número de valor. Veja a tabela abaixo para possíveis níveis de relatório de erro
error_message Requeridos. Especifica a mensagem de erro para o erro definido pelo usuário
error_file Opcional. Especifica o nome do ficheiro no qual ocorreu o erro
error_line Opcional. Especifica o número de linha, em que o erro ocorreu
error_context Opcional. Especifica uma matriz contendo cada variável, e os seus valores, em uso, quando o erro ocorreu

Erro níveis de relatório

Estes níveis de relatório de erro são os diferentes tipos de erro do manipulador de erro definida pelo usuário podem ser usados ​​para:

Valor Constante Descrição
2 E_WARNING Não fatais erros de tempo de execução. Execução do script não é interrompida
8 E_NOTICE avisos de tempo de execução. O script encontrado algo que poderia ser um erro, mas também pode acontecer quando executar um script normalmente
256 E_USER_ERROR Erro fatal gerado pelo usuário. Isto é como um E_ERROR definido pelo programador usando a função PHP trigger_error()
512 E_USER_WARNING Aviso gerado pelo usuário não-fatal. Este é parecido com E_WARNING definido pelo programador usando a função PHP trigger_error()
1024 E_USER_NOTICE aviso gerado pelo usuário. Isto é como um E_NOTICE definido pelo programador usando a função PHP trigger_error()
4096 E_RECOVERABLE_ERROR Erro fatal capturável. Isto é como um E_ERROR mas pode ser capturado por um identificador definido pelo usuário (see also set_error_handler() )
8191 E_ALL Todos os erros e avisos (E_STRICT became a part of E_ALL in PHP 5.4)

Agora vamos criar uma função para manipular erros:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

O código acima é uma função de tratamento de erros simples. Quando ele é acionado, torna-se o nível de erro e uma mensagem de erro. Em seguida, ele emite o nível de erro e mensagem e termina o script.

Agora que nós criamos uma função de tratamento de erros precisamos decidir quando deve ser acionado.


Set Error Handler

O manipulador de erro padrão para PHP é construído no manipulador de erro. Estamos indo para fazer a função acima do manipulador de erro padrão para a duração do script.

É possível alterar o manipulador de erro para solicitar apenas alguns erros, de que maneira o script pode lidar com erros diferentes de formas diferentes. No entanto, neste exemplo vamos usar o nosso manipulador de erro personalizado para todos os erros:

set_error_handler("customError");

Desde que nós queremos nossa função personalizada para lidar com todos os erros, o set_error_handler() só precisava de um parâmetro, um segundo parâmetro pode ser adicionado para especificar um nível de erro.

Exemplo

Testando o manipulador de erro ao tentar variável de saída que não existe:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

A saída do código acima deve ser algo como isto:

Error: [8] Undefined variable: test

Desencadear um erro

Em um script onde os usuários podem dados de entrada é útil para provocar erros quando ocorre uma entrada ilegal. No PHP, isto é feito pela trigger_error() função.

Exemplo

Neste exemplo, um erro ocorre se o "test" variável é maior do que "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

A saída do código acima deve ser algo como isto:

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

Um erro pode ser acionado em qualquer lugar que você deseja em um script, e pela adição de um segundo parâmetro, você pode especificar o nível de erro é acionado.

tipos de erros possíveis:

  • E_USER_ERROR - Fatal erro de tempo de execução gerado pelo usuário. Os erros que não podem ser recuperados a partir de. Execução do script é interrompida
  • E_USER_WARNING - aviso de tempo de execução gerado pelo usuário não-fatal. Execução do script não é interrompida
  • E_USER_NOTICE - Padrão. aviso de tempo de execução gerado pelo usuário. O script encontrado algo que poderia ser um erro, mas também pode acontecer quando executar um script normalmente

Exemplo

Neste exemplo, um E_USER_WARNING ocorre se o "test" variável é maior do que "1" . Se ocorrer um E_USER_WARNING usaremos nosso manipulador de erro personalizada e terminar o script:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

A saída do código acima deve ser algo como isto:

Error: [512] Value must be 1 or below
Ending Script

Agora que aprendemos a criar nossos próprios erros e como acioná-los, vamos dar uma olhada registro de erros.


Registro de erros

Por padrão, o PHP envia um log de erro de sistema de log do servidor ou um arquivo, dependendo de como a configuração error_log é definido no arquivo php.ini. Ao utilizar o error_log() função que você pode enviar logs de erro para um arquivo especificado ou um destino remoto.

O envio de mensagens de erro para si mesmo por e-mail pode ser uma boa maneira de se notificado de erros específicos.

Enviar uma mensagem de erro por E-Mail

No exemplo abaixo, vamos enviar um e-mail com uma mensagem de erro e terminar o roteiro, se ocorrer um erro específico:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

A saída do código acima deve ser algo como isto:

Error: [512] Value must be 1 or below
Webmaster has been notified

E o e-mail recebido do código acima parece com isso:

Error: [512] Value must be 1 or below

Isso não deve ser usado com todos os erros. erros regulares devem ser registrados no servidor usando o sistema de registro PHP padrão.