Ya configuré mi controlador de errores:
set_error_handler (function($errno, $errstr, $errfile, $errline, array $errcontext) {
$s = date('Ymd_His');
switch ($errno)
{
case E_USER_ERROR:
$s.= '_E_';
break;
case E_USER_WARNING:
$s.= '_W_';
break;
case E_USER_NOTICE:
$s.= '_N_';
break;
default:
$s.= '_U_';
break;
}
file_put_contents (APP_PATH_CACHE.'/log'.$s.'_'.rand(1,99999).'.html', print_r(get_defined_vars(), true));
}, E_ALL);
pero ¿puede convertirse en una excepción? Para que pudiera ver el flujo.
Sí. esta es exactamente la razón por la que se creó la excepción ErrorException. ver http://php.net/manual/en/class.errorexception.php
function exception_error_handler($severity, $message, $file, $line) {
if (!(error_reporting() & $severity)) {
// This error code is not included in error_reporting
return;
}
throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");
Sí, se puede hacer simplemente. La mejor manera es crear su propia clase que se extienda desde \Exception y en su error_handler() lanzar el objeto de esta nueva clase.
Puedes hacerlo también de forma sencilla después
file_put_contents (APP_PATH_CACHE.'/log'.$s.'_'.rand(1,99999).'.html', print_r(get_defined_vars(), true));
agregar
throw new Exception($errst, $errno);
donde el primer parámetro es el mensaje y el segundo es el número de error
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
No entiendo los votos negativos. ¿Duplicado de la pregunta 10520390? De todos modos, votando…
– Felipmartins
28 de septiembre de 2015 a las 12:21
Bueno, para mí no fue sencillo. Si lanzo solo una excepción, el seguimiento inverso conducirá al controlador de errores, no a la fuente del mismo. Problema similar con “errores fatales” en “apagado”
– John Smith
28 de septiembre de 2015 a las 14:39
@JohnSmith, el seguimiento inverso cruza la ubicación del controlador de errores, pero no se detiene allí, continúa hasta la línea donde se generó el error, consulte 3v4l.org/CpsPS , todos mencionan la línea 13, donde se generó el error. (desde al menos php 5.1, pero probablemente antes, pero con pruebas cba porque se introdujo ErrorException en 5.1)
– hanshenrik
27 de mayo de 2018 a las 10:48