Muitos se perguntam: Como registrar um FATAL_ERROR em PHP se a set_error_handler() não pega esse tipo de erro ? Bom, a set_error_handler() não pega um FATAL_ERROR por que um erro fatal não pode ser tratado pelo usuário, ele deve realmente abortar a aplicação pois ela não tem mais condições de ser executada.

Mesmo assim, podemos registrar os FATAL_ERROR por meio da função register_shutdown_function(). Essa função programa uma função do escopo do usuário para ser executada quando a apliação terminar pelo bem (execução normal) ou pelo mal (com um erro).

A seguir temos um programa no qual registramos a função termina_programa() para ser executada no término da aplicação. Essa função verifica se ocorreu algum erro e, em caso afirmativo, registra esse erro em um arquivo de LOG. Para causar um erro fatal, simplesmente estamos chamando uma função que não existe: funcao_que_naoexiste().

  1. <?php
  2. register_shutdown_function('termina_programa');
  3. function termina_programa()
  4. {
  5.     $error error_get_last();
  6.     if($error !== NULL)
  7.     {
  8.         $info "[SHUTDOWN] file:".$error['file']." | ln:".$error['line']." | msg:".$error['message'] .PHP_EOL;
  9.         file_put_contents('error.log'$infoFILE_APPEND);
  10.     }
  11. }
  12. funcao_que_naoexiste();
  13. ?>


Arquivo error.log

[SHUTDOWN] file:/tmp/t2.php | ln:14 | msg:Call to undefined function funcao_que_naoexiste()


Comentários

 


Você precisa realizar login pelo Facebook para enviar posts, comentários, apagar posts ou baixar posts em PDF. Para isso, clique no botão "Login no facebook".



Receba os posts por email: (?)

Conheça o Adianti Framework para PHP:

  • Desenvolvimento com componentes;
  • Formulários e datagrids.
  • Versão Web e Desktop (Gtk);
  • Multiplataforma;
  • Desenhe as interfaces;
  • IDE própria (Adianti Studio).
Ver detalhes...

Tenha mais produtividade com:

Adianti Studio: IDE para PHP

  • Leve e rápido;
  • Syntax highlight;
  • Gerência de projetos;
  • Navegação em banco de dados;
  • Autocomplete e plugins.
Mais informações...