2010-07-12 41 views

Trả lời

73

Bạn có thể sử dụng glob

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE); 

Nếu bạn cần điều này là case-insensitive, bạn có thể sử dụng một DirectoryIterator kết hợp với một RegexIteratorhoặc vượt qua kết quả của scandir-array_map và sử dụng một callback mà lọc mọi tiện ích mở rộng không mong muốn. Cho dù bạn sử dụng strpos, fnmatch hoặc pathinfo để tiện ích mở rộng tùy thuộc vào bạn.

+5

Điều đó ... không còn sử dụng 'scandir()' nữa. Nhưng nếu không thì đúng. Vì vậy, không nên là "không, với' glob' "? – Borealid

+0

@Borealid nitpicker: D – Gordon

+2

Bây giờ làm cho nó không phân biệt chữ hoa chữ thường. > :) – salathe

5

Bạn có thể tìm kiếm trên mảng kết quả sau đó và loại bỏ các tập tin không phù hợp với tiêu chí của bạn.

scandir không có chức năng bạn tìm kiếm.

12

tôi sẽ lặp qua các tập tin và nhìn vào phần mở rộng của họ:

$dir = '/tmp'; 
$dh = opendir($dir); 
while (false !== ($fileName = readdir($dh))) { 
    $ext = substr($fileName, strrpos($fileName, '.') + 1); 
    if(in_array($ext, array("jpg","jpeg","png","gif"))) 
     $files1[] = $fileName; 
} 
10

Đây là một cách đơn giản để có được chỉ hình ảnh. Hoạt động với PHP> = 5.2 phiên bản. Bộ sưu tập các tiện ích mở rộng là chữ thường, do đó, làm cho phần mở rộng của tệp lặp lại thành chữ thường làm cho nó không phân biệt chữ hoa chữ thường.

// image extensions 
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp'); 

// init result 
$result = array(); 

// directory to scan 
$directory = new DirectoryIterator('/dir/to/scan/'); 

// iterate 
foreach ($directory as $fileinfo) { 
    // must be a file 
    if ($fileinfo->isFile()) { 
     // file extension 
     $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); 
     // check if extension match 
     if (in_array($extension, $extensions)) { 
      // add to result 
      $result[] = $fileinfo->getFilename(); 
     } 
    } 
} 
// print result 
print_r($result); 

Tôi hy vọng điều này hữu ích nếu bạn muốn tiện ích mở rộng không phân biệt dạng chữ và hình ảnh.

+0

Hoạt động hoàn hảo! –

16

Câu hỏi thực tế là sử dụng scandir và câu trả lời kết thúc bằng glob. Có một sự khác biệt rất lớn trong cả hai nơi blob nặng đáng kể. Việc lọc tương tự có thể được thực hiện với scandir bằng cách sử dụng mã sau:

$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f)); 

Tôi hy vọng điều này sẽ giúp ai đó.

1

Nếu bạn muốn quét một thư mục và gửi lại tên tập tin duy nhất mà bạn có thể sử dụng này:

$fileNames = array_map(
    function($filePath) { 
     return basename($filePath); 
    }, 
    glob('./includes/*.{php}', GLOB_BRACE) 
); 

scandir() sẽ trở lại ... cũng như các tập tin, vì vậy đoạn code trên là sạch hơn nếu bạn chỉ cần tên tập tin hoặc bạn muốn làm những việc khác với các tập tin thực tế

+0

cảm ơn. Nó giúp –

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