2010-04-30 77 views
46

Có cách nào để viết hàm file_exists của PHP để nó tìm kiếm một thư mục cho một tệp có phần mở rộng tùy ý hay không. Ví dụ, giả sử tôi biết rằng một tập tin được gọi là "hello", nhưng tôi không biết phần mở rộng, làm cách nào để viết một hàm tìm kiếm một tệp có tên là hello. * Và trả về tên của tệp này? Theo như tôi có thể nói, file_exists sẽ chỉ tìm kiếm một chuỗi.PHP file_exists và ký tự đại diện

Cảm ơn.

+1

* (liên quan) * http://www.phparch.com/2010/04/28/putting-glob-to-the-test/ – Gordon

Trả lời

81

Bạn đang tìm kiếm chức năng glob().

file_exists không thực hiện bất kỳ loại tìm kiếm nào: nó chỉ cho phép người dùng biết liệu có tồn tại hoặc không, nếu biết tên của nó.

Và, với PHP> = 5.3, bạn có thể sử dụng GlobIterator mới.


Như một ví dụ với glob(), phần mã sau đây:

$list = glob('temp*.php'); 
var_dump($list); 

Cung cấp cho tôi kết quả này:

array 
    0 => string 'temp-2.php' (length=10) 
    1 => string 'temp.php' (length=8) 


Trong khi người ta này:

$list = glob('te*-*'); 
var_dump($list); 

Vâng, với hai * ;-)

Sẽ cung cấp cho tôi:

array 
    0 => string 'temp-2.php' (length=10) 
    1 => string 'test-1.php' (length=10) 
    2 => string 'test-curl.php' (length=13) 
    3 => string 'test-phing-1' (length=12) 
    4 => string 'test-phpdoc' (length=11) 
+0

+1 đánh bại tôi với nó. –

+0

Tôi biết phải có một chức năng tốt hơn cho việc này. Cảm ơn bạn! – bsamek

+0

Bạn được chào đón :-) Hãy vui vẻ! –

4

Tính đến PHP5.3, bạn cũng có thể sử dụng GlobIterator để tìm kiếm một thư mục với các kí hiệu:

$it = iterator_to_array(
    new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME)); 

sẽ trả lại đường dẫn đầy đủ cho tất cả các tệp .pdf trong một số/đường dẫn trong một mảng. Ở trên thực hiện giống như glob(), nhưng trình vòng lặp cung cấp API mạnh mẽ hơn và có thể mở rộng hơn.

1

Nếu bạn cần kiểm soát nhiều hơn một chút và đang sử dụng PHP 5.3 trước, bạn có thể sử dụng Trình chuyển đổi thư mục hoặc Bộ đệ quyDirectoryIterator. Cả hai đều có rất nhiều chức năng tuyệt vời để kiểm soát và thao tác bổ sung.

tài liệu PHP đang ở DirectoryIteratorRecursiveDirectoryIterator

3

Chừng nào file_exists trả về một BOOLEAN tôi đã viết chức năng nhỏ này chấp nhận một chuỗi tìm kiếm với * để tìm kiếm các file ... Ví dụ:

searchForFile("temp*"); 

    function searchForFile($fileToSearchFor){ 
     $numberOfFiles = count(glob($fileToSearchFor)); 
     if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);} 
    } 
+0

Hoạt động như sự quyến rũ. Lưu ý phụ: bạn có thể cần phải thêm phần $ _SERVER ['DOCUMENT_ROOT'] vào phía trước tên tệp. –

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