Manual do PHP
Anterior |  | Próxima

# set_error_handler

(PHP 4 >= 4.0.1, PHP 5)

set_error_handler -- Define uma função do usuário para manusear os erros.

## Descrição

string set_error_handler ( callback error_handler )

Define uma função do usuário (error_handler) para manusear os erros no script. Retorna a função definida anteriormente (se houver alguma), ou `FALSE` em caso de erro. Esta função pode ser usada para definir o seu próprio meio de manusear os erros durante a execução do script, por exemplo em aplicações que você precisa fazer uma limpesa de dados/arquivos quando um erro crítico acontece, ou quando você quer criar um erro sobre certas condições (usando trigger_error()).

A função do usuario precisa aceitar dois parâmetros: o código do erro e a string descrevendo o erro. Apartir do PHP 4.0.2, três parâmetros opcionais são fornecidos: o nome do erro onde o arquivo aconteceu, o número da linha onde o erro aconteceu, e o contexto onde o erro aconteceu (uma matriz que aponta para a tabela de símbolos ativos no ponto onde aconteceu o erro).

> Nota: Ao invés de um nome de função, uma matriz contendo uma referência a um objeto e um nome de metodo pode ser indicado (Apartir do PHP 4.3.0).

> Nota: Os seguintes tipos de erro não podem ser manuseados por uma função definida pelo usuário: `E_ERROR`, `E_PARSE`, `E_CORE_ERROR`, `E_CORE_WARNING`, `E_COMPILE_ERROR` e `E_COMPILE_WARNING`.

O exemplo abaixo mostra como manusear exceções criando erros e gerenciando erros com uma função definida pelo usuário:

Exemplo 1. Manuseando erros com set_error_handler() e trigger_error()
`<?php // redefine the user error constants - PHP 4 only define("FATAL", E_USER_ERROR); define("ERROR", E_USER_WARNING); define("WARNING", E_USER_NOTICE); // set the error reporting level for this script error_reporting(FATAL | ERROR | WARNING); // error handler function function myErrorHandler($errno, $errstr, $errfile, $errline) { switch ($errno) { case FATAL: echo "<b>FATAL</b> [$errno] $errstr<br />\n"; echo " Fatal error in line $errline of file $errfile"; echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br />\n"; echo "Aborting...<br />\n"; exit(1); break; case ERROR: echo "<b>ERROR</b> [$errno] $errstr<br />\n"; break; case WARNING: echo "<b>WARNING</b> [$errno] $errstr<br />\n"; break; default: echo "Unkown error type: [$errno] $errstr<br />\n"; break; } } // function to test the error handling function scale_by_log($vect, $scale) { if (!is_numeric($scale) || $scale <= 0) { trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", FATAL); } if (!is_array($vect)) { trigger_error("Incorrect input vector, array of values expected", ERROR); return null; } for ($i=0; $i<count($vect); $i++) { if (!is_numeric($vect[$i])) trigger_error("Value at position $i is not a number, using 0 (zero)", WARNING); $temp[$i] = log($scale) * $vect[$i]; } return $temp; } // set to the user defined error handler $old_error_handler = set_error_handler("myErrorHandler"); // trigger some errors, first define a mixed array with a non-numeric item echo "vector a\n"; $a = array(2,3, "foo", 5.5, 43.3, 21.11); print_r($a); // now generate second array, generating a warning echo "----\nvector b - a warning (b = log(PI) * a)\n"; $b = scale_by_log($a, M_PI); print_r($b); // this is trouble, we pass a string instead of an array echo "----\nvector c - an error\n"; $c = scale_by_log("not array", 2.3); var_dump($c); // this is a critical error, log of zero or negative number is undefined echo "----\nvector d - fatal error\n"; $d = scale_by_log($a, -2.5); ?>`
E quando você usar este script de exemplo, a saída será:
    vector a
    Array
    (
        [0] => 2
        [1] => 3
        [2] => foo
        [3] => 5.5
        [4] => 43.3
        [5] => 21.11
    )
    ----
    vector b - a warning (b = log(PI) * a)
    <b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br />
    Array
    (
        [0] => 2.2894597716988
        [1] => 3.4341896575482
        [2] => 0
        [3] => 6.2960143721717
        [4] => 49.566804057279
        [5] => 24.165247890281
    )
    ----
    vector c - an error
    <b>ERROR</b> [512] Incorrect input vector, array of values expected<br />
    NULL
    ----
    vector d - fatal error
    <b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br />
      Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br />
    Aborting...<br />

É importante lembrar que o gerenciamento de erro do padrão do PHP é completamente ignorado. As definições de error_reporting() não terão efeito e seu gerenciador de erro será chamado. Em todo o caso, você ainda poderá ler o valor atual de error_reporting e ajir apropriadamente. Uma nota em particular é que este valor será 0 se o comando que causou o erro for precedido pelo operador de controle de erro @.

Note também que é sua responsabilidade usar o die() se necessário. Se a função que gerencia os erros retornar, a execução do script irá continuar a apartir do comando seguinte ao que causou o erro

> Nota: Se o erro acontecer antes da execução do script(ex. enquanto o arquivo é carregado) a função defina pelo usuario não será chamada já que não estará ainda registrada.

Veja também error_reporting(), restore_error_handler(), trigger_error() e constantes de níveis de erro.

Anterior | Principal | Próxima
restore_exception_handler | Acima | set_exception_handler