2010-07-21 24 views
24

Tôi cần kiểm tra xem tệp có tồn tại hay không nhưng tôi không biết phần mở rộng.Tệp kiểm tra PHP tồn tại mà không biết phần mở rộng

IE Tôi muốn làm:

if(file_exists('./uploads/filename')): 
// do something 
endif; 

Tất nhiên đó không làm việc, vì nó không có phần mở rộng. phần mở rộng sẽ là jpg, jpeg, png, gif

Bất kỳ ý tưởng nào về cách thực hiện điều này mà không thực hiện vòng lặp?

Trả lời

48

Bạn sẽ phải làm một glob():

$result = glob ("./uploads/filename.*"); 

và xem liệu $result chứa bất cứ điều gì.

+11

'glob' cũng có thể được sử dụng với một cú đúp mở rộng như bash:' glob ("./ uploads/filename. {Jpg, jpeg, png, gif}", GLOB_BRACE) '. – Gumbo

+0

@pekka: Cảm ơn rất nhiều. –

-1

Bạn có biết về hàm filetype của PHP không? http://php.net/manual/en/function.filetype.php

Hoặc cách khác is_file() http://www.php.net/manual/en/function.is-file.php

+0

Điều này dường như không giải quyết được câu hỏi ở tất cả –

+0

Nhưng anh ấy không thể nhận được loại tệp mà không biết tên tệp hoàn chỉnh, đó là vấn đề chính xác của anh ấy. Anh ấy biết tệp được đặt tên là 'filename. ???' và cần biết cách tìm ra '???' mà không looping trên một loạt các phần mở rộng kiểm tra mỗi người trong số họ –

+0

Bạn đang phải ... tôi missunderstood filetype. Nhưng anh ta có thể làm điều đó với is_file(). Bạn không nghĩ vậy sao? – gearsdigital

3

Tôi đã có nhu cầu tương tự, và cố gắng sử dụng glob nhưng chức năng này dường như không được cầm tay:

Xem chú thích từ http://php.net/manual/en/function.glob.php:

Lưu ý: Chức năng này không khả dụng trên một số hệ thống (ví dụ: Sun OS cũ).

Lưu ý: Cờ GLOB_BRACE không khả dụng trên một số hệ thống không phải GNU, như Solaris.

Nó cũng hơn chậm hơn so với opendir, hãy xem tại địa chỉ: Which is faster: glob() or opendir()

Vì vậy, tôi đã thực hiện một chức năng đoạn mà làm điều tương tự:

function resolve($name) { 
    // reads informations over the path 
    $info = pathinfo($name); 
    if (!empty($info['extension'])) { 
     // if the file already contains an extension returns it 
     return $name; 
    } 
    $filename = $info['filename']; 
    $len = strlen($filename); 
    // open the folder 
    $dh = opendir($info['dirname']); 
    if (!$dh) { 
     return false; 
    } 
    // scan each file in the folder 
    while (($file = readdir($dh)) !== false) { 
     if (strncmp($file, $filename, $len) === 0) { 
      if (strlen($name) > $len) { 
       // if name contains a directory part 
       $name = substr($name, 0, strlen($name) - $len) . $file; 
      } else { 
       // if the name is at the path root 
       $name = $file; 
      } 
      closedir($dh); 
      return $name; 
     } 
    } 
    // file not found 
    closedir($dh); 
    return false; 
} 

Cách sử dụng:

$file = resolve('/var/www/my-website/index'); 
echo $file; // will output /var/www/my-website/index.html (for example) 

Hy vọng rằng có thể giúp ai đó, Ioan

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