2011-11-04 24 views
11

Estoy tratando de incluir un archivo y capturarlo si el archivo no existe/no se puede abrir. Hubiera pensado que una simple declaración try/catch habría funcionado, pero PHP parece ignorarla por completo y se ha producido un error.PHP catch a failed include

¿Alguna idea? Sé que hay otras preguntas como esta en stackoverflow, las he visto, pero ninguna de ellas parece tener una respuesta correcta y funcional.

Respuesta

23

se puede comprobar el valor de retorno de incluir para ver si fallaba o no:

if((@include $filename) === false) 
{ 
    // handle error 
} 

Se habrá dado cuenta que incluí el operador supresión de errores (@) para ocultar los mensajes de error estándar que se muestren.

+2

usando @ es una solución muy sucia – Nicolas

+8

Creo que al usar @, el operador de control de errores está perfectamente bien, si maneja el error. Simplemente se asegura de que el desagradable error de inclusión no se emita si la configuración tiene tales advertencias activadas. – drew010

+0

Sí, la razón exacta por la que quiero hacer esto es para poder manejar el error;) –

4

Dado que include() devuelve false cuando falla, simplemente verifique si devuelve verdadero y luego haga algo como die() o muestre un error.

if (!include('page.php')) 
    die('Error.'); 
+3

Si vas a 'morir', también puedes usar [requiere] (http://php.net/ manual/es/function.require.php) sin embargo. –

+0

Sí, buen punto. – Simone

+0

Esto todavía muestra la advertencia php. –