2011-04-02 17 views
6

Esta es una pregunta simple que una hora de Google no parece resolver. ¿Cómo captas una inclusión fallida en PHP? Para el siguiente código:try catch a failed include

try { 
    include_once 'mythical_file'; 
} catch (Exception $e) { 
    exit('Fatal'); 
} 

echo '?'; 

Con mythical_file no existe, obtengo el resultado '?'. Sé que PHP no puede detectar el error requerido porque desencadena un error de advertencia, pero aquí? ¿Cuál es la mejor manera de atrapar una inclusión fallida? Por ejemplo, las siguientes obras:

(include_once 'unicorn') or exit('!'); 

pero no desencadena una excepción por lo que no pueden recuperar el archivo, la línea y contexto de pila.

+0

Es posible que desee ver en [register_s hutdown_function()] (http://php.net/manual/en/function.register-shutdown-function.php) en combinación con [error_get_last()] (http://php.net/manual/en/function. error-get-last.php). Debería ser capaz de recuperar archivos, líneas, etc. – billrichards

Respuesta

2

Se puede utilizar en lugar de require_onceinclude_once

+0

Bueno, supongo que tendré que cerrar el ticket porque aparentemente funciona en algunos de mis servidores virtuales y otros no (el uso de require provocará un error de 500). Gracias de todos modos por tu ayuda! – fabjoa

+1

@fabjoa, @Gaurav - no tenemos "tickets" aquí, así que no hay nada que pueda cerrarse. – Dori

1

include y include_once gatillo advertencia (E_WARNING), require y require_once gatillo error (E_COMPILE_ERROR). Por lo tanto, debe usar require o require_once. cita

php.net:

"require() es idéntica a incluir() excepto en caso de fallo También producir un nivel E_COMPILE_ERROR fatal error En otras palabras, se detendrá. el guión incluye mientras que() sólo emite una advertencia (E_WARNING), que permite que el script continúe. "

+0

No use '_once' a menos que sea absolutamente necesario porque afecta un poco el rendimiento. – transilvlad

+0

@tntu ¿puedes explicarlo? Comprendí que usar require o include cuando el archivo ya está incluido es una pérdida de recursos mayor que utilizar _once. ¡Gracias! – billrichards

+0

@billrichards Si escribe un buen código, nunca debería encontrar la situación en la que incluye el mismo archivo dos veces. La explicación de la diferencia en el rendimiento se explica aquí: http://stackoverflow.com/questions/186338/why-is-require-once-so-bad-to-use – transilvlad