2010-05-05 37 views
5

Estoy escribiendo un servicio de error de registro que se integrará en los sitios web que se ejecutan en mi servidor, que me va a enviar por correo electrónico los lotes de error, etc.registro fatal/analizar los errores en PHP5

Así que he estado tratando de encontrar si hay una forma de manejar los errores fatales y análisis, sin embargo, no utilizar los trucos para manejarlo en código PHP (buffer de salida, función de apagado). Estoy bastante feliz de escribir algún código C o algo para manejarlo fuera de mi código PHP. También me gustaría emitir un redireccionamiento si es posible (mis sitios usan el almacenamiento en búfer de salida por lo que no debe haber ningún encabezado enviado).

Estoy bastante seguro de que esto podría hacerse con un módulo de PHP, pero nunca he escrito uno y no tengo ni idea de dónde empezar.

Respuesta

3

No hay forma de que capture un error grave o de parse en PHP. Pero ...

En 5.2, agregaron error_get_last(). Puede llamarlo dentro de una función de apagado y realizar el registro. Un ejemplo para no probado 5.3 disparando un mail cuando había un error fatal:

<?php 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
     && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) { 
     error_log("Oh noes, a fatal: " . var_export($err, true), 1, '[email protected]'); 
    } 
}); 

(. Usted tendrá que utilizar una devolución de llamada si no está en 5.3 y no se puede hacer funciones anónimas)

Desafortunadamente, debido a que esto se maneja en una función de apagado, es probable que los encabezados ya hayan sido emitidos y que no pueda proporcionar nada útil al usuario. Sin embargo, esto depende del resto de la aplicación, por lo que podría funcionar para usted. ¡Pruébalo y descúbrelo!

+0

Dejé en claro en mi pregunta que no estoy tratando de detectar los errores usando esos trucos de PHP, solo necesito registrarlos y manejarlos de alguna manera. El uso de un módulo de PHP parece la forma más probable, pero no puedo encontrar mucha información sobre el manejo de errores en los módulos de PHP. – PeterBelm

+0

También dejé en claro en mi respuesta que no puede atrapar, pero puede iniciar sesión. :) – Charles

+0

funcionó para mí, también la sintaxis del código es incorrecta –

1

De forma predeterminada, todos los errores se pasan al registro de errores del servidor web, pero puede cambiarlo en php.ini especificando la ruta a su propio archivo via error_log setting. Entonces, lo que queda por hacer es escribir algún script/aplicación por separado para analizar/enviar datos/truncar el archivo de registro cada día/lo que sea y ejecutarlo como tarea cron.

+0

El único problema con esto es que no podría emitir una redirección. Creo que con un módulo de PHP podría lograr esto. – PeterBelm

Cuestiones relacionadas