2011-01-05 12 views
35

Potrzebuję funkcji/instrukcji include, która będzie zawierać plik tylko wtedy, gdy istnieje. Czy jest jeden w PHP?Jak uwzględnić tylko, jeśli plik istnieje

Możecie zasugerować używając @include ale istnieje problem z tym podejściem - w przypadku plików, które należy uwzględnić istnieje, PHP ostrzeżenia nie wyjściowe jeśli parser znaleźć coś złego w załączonym pliku.

+1

Czy pytasz o coś innego niż te, które dajesz? Ciężko mi jest uwierzyć, że znasz '@' i 'include()', ale nie 'file_exists()'. – JakeParis

+0

@ JMC Creative, jestem świadomy podejścia 'file_exists()'. Powinienem to wspomnieć. –

Odpowiedz

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

To powinno robić co chcesz

+10

Lub bez warunku w jednym wierszu: 'file_exists (plik $) AND include $ file;' ... – ircmaxell

+14

Lepiej używać 'is_file', co pozwoli uniknąć katalogów - dla bezpieczniejszego kodu. –

+0

@hakre Myślę, że naprawiłem to, łącząc go z odpowiedzią StephaneJAIS. – Riking

3

Co powiesz na używanie file_exists przed include?

0

the @ pomija komunikaty o błędach.

ty cloud zastosowanie:

$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

WYJAŚNIENIE! WYJAŚNIENIE! WYJAŚNIENIE! –

+0

To wygląda na konkretne wymaganie biznesowe. Poza tym, jeśli zrobisz to w swoim pliku index.php, będzie to nieskończona pętla. – 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

podstawie @ odpowiedź Select0r za, skończyło się za pomocą

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

To rozwiązanie działa nawet jeśli piszesz kod w pliku, który został włączony sobie z pliku w innym katalogu.

0
@include($file); 

Używając z przodu, ignoruje wszelkie błędy, które ta funkcja mogła wygenerować. Nie nadużywaj tego, ponieważ TO JEST WAY SLOWER niż w przypadku, gdy, ale jest to najkrótsza alternatywa kodu.

Powiązane problemy