Рекурсивный поиск файлов (PHP)

Я пытаюсь вернуть файлы в указанном каталоге, используя рекурсивный поиск. Я успешно достиг этого, однако я хочу добавить несколько строк кода, которые позволят мне указать определенные расширения, которые я хочу вернуть.

Например, верните только файлы .jpg в каталог.

Вот мой код,

<?php $it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); foreach(new RecursiveIteratorIterator($it) as $file) { echo $file . "<br/> \n"; } ?> 

сообщите мне, что я могу добавить к вышеуказанному коду, чтобы добиться этого, спасибо

Solutions Collecting From Web of "Рекурсивный поиск файлов (PHP)"

 <?php $it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); $display = Array ( 'jpeg', 'jpg' ); foreach(new RecursiveIteratorIterator($it) as $file) { if (in_array(strtolower(array_pop(explode('.', $file))), $display)) echo $file . "<br/> \n"; } ?> 

Вы должны создать фильтр:

 class JpegOnlyFilter extends RecursiveFilterIterator { public function __construct($iterator) { parent::__construct($iterator); } public function accept() { return $this->current()->isFile() && preg_match("/\.jpe?g$/ui", $this->getFilename()); } public function __toString() { return $this->current()->getFilename(); } } $it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); $it = new JpegOnlyFilter($it); $it = new RecursiveIteratorIterator($it); foreach ($it as $file) ... 

Попробуйте это, он использует массив разрешенных типов файлов и только echos из файла, если расширение файла существует в массиве.

 <?php $it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); $allowed=array("pdf","txt"); foreach(new RecursiveIteratorIterator($it) as $file) { if(in_array(substr($file, strrpos($file, '.') + 1),$allowed)) { echo $file . "<br/> \n"; } } ?> 

Вы также можете обнаружить, что вы можете передать массив разрешенных типов файлов в свой класс RecursiveDirectoryIterator и возвращать только файлы, которые соответствуют.

Пусть PHP выполнит эту работу:

 $directory = new RecursiveDirectoryIterator('path/to/directory/'); $iterator = new RecursiveIteratorIterator($directory); $regex = new RegexIterator($iterator, '/\.jpg$/i', RecursiveRegexIterator::GET_MATCH); echo '<pre>'; print_r($regex); 

Вы можете просмотреть эту страницу об использовании glob () для аналогичного поиска:

http://www.electrictoolbox.com/php-glob-find-files/

в отношении ответа на верхний голос я создал этот код, который использует меньше функций только 3 isset (), array_flip (), explode () вместо 4 функций, которые я тестировал в верхнем голосовом ответе, и он был медленнее, чем у меня. Я предлагаю попробовать

  $it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); foreach(new RecursiveIteratorIterator($it) as $file) { $FILE = array_flip(explode('.', $file)); if (isset($FILE['php']) || isset($FILE['jpg'])) { echo $file. "<br />"; } }