2011-01-05 14 views
35

necesito una función include/declaración que incluirá un archivo sólo si existe. ¿Hay uno en PHP?Como incluir sólo si existe el archivo

Puede sugerir el uso de @include, pero existe un problema con este enfoque: en caso de que el archivo que se va a incluir exista, PHP no emitirá advertencias si el analizador encuentra algo incorrecto en el archivo incluido.

+1

¿Estás pidiendo algo diferente a lo que estas respuestas te están dando? Estoy teniendo dificultades para creer que sabes '@' y 'include()' pero no 'file_exists()'. – JakeParis

+0

@JMC Creative, conozco el enfoque 'file_exists()'. Debería haber mencionado eso. –

Respuesta

74
if(file_exists('file.php')) 
    include 'file.php'; 

Eso debería hacer lo que quiera

+10

o sin la condicional en una sola línea: 'file_exists ($ archivo) e incluyen $ archivo;' ... – ircmaxell

+14

mejor usar 'is_file', lo que evitaría directorios - para el código más seguro. –

+0

@hakre Creo que lo arreglé combinándolo con la respuesta de StephaneJAIS. – Riking

3

Cómo sobre el uso file_exists antes de la include?

0

la @ suprime los mensajes de error.

que el uso nube:

$file = 'script.php'; 
if(file_exists($file)) 
    include($file); 
-3
<?php 
    if(file_exists('file.php')) 
     include 'file.php'; 
    }else{ 
     header("Location: http://localhost/); 
     exit; 

    } 
+0

¡EXPLICACIÓN! ¡EXPLICACIÓN! ¡EXPLICACIÓN! –

+0

Esto parece un requisito comercial específico. Además, si haces esto en tu archivo index.php, será un bucle infinito. – Roland

0
function get_image($img_name) { 
    $filename = "../uploads/" . $img_name; 
    $file_exists = file_exists($filename); 
    if ($file_exists && !empty($img_name)) { 
     $src = '<img src="' . $filename . '"/>'; 
    } else{ 
     $src = ''; 
    } 
    return $src; 
} 
echo get_image($image_name); 
5

Sobre la base de la respuesta de @ Select0r, terminé usando

if (file_exists(stream_resolve_include_path($file))) 
    include($file); 

Esta solución funciona incluso si se escribe el código en un archivo que se ha incluido en sí de un archivo en otro directorio.

0
@include($file); 

Al usar en frente, ignora cualquier error que pueda generar esa función. No abuse de esto ya que ES MUCHO MÁS LENTO que verificar con if, pero es la alternativa de código más corta.

Cuestiones relacionadas