2012-02-17 12 views

Respuesta

9

Se no es posible para controlar los errores fatales utilizando un controlador de errores personalizado.

La mejor solución es simplemente habilitar el registro de errores (por ejemplo, para syslog) en su php.ini y luego usar una herramienta como logcheck/logsentry para recibir correos electrónicos regulares sobre entradas inusuales de syslog.
En lugar de syslog PHP también puede registrar errores en un archivo, simplemente eche un vistazo a las opciones de registro de errores de php.ini.

log_errors = On 
error_log = syslog 
error_log = /path/to/some/folder/phperrors.log 

Obviamente sólo desea utilizar una de las líneas error_log.

+0

¿cómo puedo habilitar el registro de errores en php.ini? – Hamidreza

+0

Debería poder manejar un error fatal con register_shutdown_function() –

+0

@ SebastiánGrignoli: no hay una forma clara de detectar si hubo un error en esa función. – ThiefMaster

0

Algo así como:

if(!method_exists($obj, 'method')){ 

    $db->log('What you want to log'); //log in your DB 
    error_log('message');//Write to php's error log 

} 
+0

que tienen un controlador de errores de manejo de mi error, pero un error como el anterior, no podía manejar ellos o log. – Hamidreza

+0

Ugh, estoy bastante seguro de que quiere una solución genérica. – ThiefMaster

+0

No sé dónde ocurre este error. Necesito registrar todo tipo de error – Hamidreza

1

usted podría tener toda su base clases pertenecen a una super-clase que utiliza method overloading:

class Base 
{ 
    public function __call($name) 
    { 
     MyLog::logError(...); 
     trigger_error("Function ".get_class($this)."::$name doesn't exist", 
      E_USER_ERROR); 
    } 
} 

Los intentos de invocar métodos no-existentes de clases derivadas de Base serían en última instancia manejados por Base::__call(). Para los métodos estáticos, en consecuencia, está __callStatic() (a partir de PHP 5.3).

6

Hay una manera de hacer frente a su tarea y en realidad PUEDE establecer un controlador de error personalizado en los errores FATAL.

Puede hacerlo de esta manera:

ini_set('error_reporting', E_ERROR); 
register_shutdown_function("fatal_handler"); 
function fatal_handler() { 
    $error = error_get_last(); 
    //Do whatever you want with this error, for example: 
    YourDBApplicationLayer::writeFatal($error); 
} 
0

ahora su posible en PHP7

try { 

    ggggg(); // <---- make fatal error 

}catch(Error $e){ 

    var_dump($e); 

} 
Cuestiones relacionadas