2011-01-05 29 views
35

Tôi cần một hàm/tuyên bố include sẽ chỉ bao gồm một tệp nếu nó tồn tại. Có một trong PHP? Bạn có thể đề xuất sử dụng @include nhưng có vấn đề với cách tiếp cận đó - trong trường hợp tệp được đưa vào tồn tại, PHP sẽ không xuất hiện cảnh báo nếu trình phân tích cú pháp tìm thấy điều gì đó sai trong tệp được bao gồm.Cách chỉ bao gồm nếu tệp tồn tại

+1

Bạn có yêu cầu điều gì đó khác với những câu trả lời này đang cung cấp cho bạn không? Tôi đang có một thời gian khó tin rằng bạn biết '@' và 'include()' nhưng không phải 'file_exists()'. – JakeParis

+0

@JMC Creative, tôi biết phương thức 'file_exists()'. Đáng lẽ tôi phải đề cập điều đó. –

Trả lời

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

Điều đó sẽ làm những gì bạn muốn

+10

Hoặc không có điều kiện trong một dòng: 'file_exists ($ file) VÀ bao gồm $ file;' ... – ircmaxell

+14

Tốt hơn để sử dụng 'is_file', điều này sẽ tránh các thư mục - cho mã an toàn hơn. –

+0

@hakre Tôi nghĩ rằng tôi đã khắc phục điều đó bằng cách kết hợp nó với câu trả lời của StephaneJAIS. – Riking

3

Cách sử dụng file_exists trước include?

0

@ chặn thông báo lỗi.

bạn đám mây sử dụng:

$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

GIẢI THÍCH! GIẢI TRÌNH! GIẢI TRÌNH! –

+0

Điều này trông giống như yêu cầu kinh doanh cụ thể. Bên cạnh đó, nếu bạn làm điều này trong tập tin index.php của bạn, nó sẽ là vòng lặp vô tận. – 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

Dựa trên câu trả lời @ Select0r, tôi đã kết thúc bằng

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

làm việc Giải pháp này ngay cả khi bạn viết mã này trong một tập tin đó đã được đưa vào bản thân từ một tập tin trong thư mục khác.

0
@include($file); 

Sử dụng ở phía trước, bỏ qua mọi lỗi mà chức năng đó có thể phát sinh. Đừng lạm dụng điều này vì IT IS WAY SLOWER hơn là kiểm tra nếu, nhưng đó là giải pháp thay thế mã ngắn nhất.

Các vấn đề liên quan