Я пытаюсь вернуть файлы в указанном каталоге, используя рекурсивный поиск. Я успешно достиг этого, однако я хочу добавить несколько строк кода, которые позволят мне указать определенные расширения, которые я хочу вернуть.
Например, верните только файлы .jpg в каталог.
Вот мой код,
<?php $it = new RecursiveDirectoryIterator("L:\folder\folder\folder"); foreach(new RecursiveIteratorIterator($it) as $file) { echo $file . "<br/> \n"; } ?>
сообщите мне, что я могу добавить к вышеуказанному коду, чтобы добиться этого, спасибо
<?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 () для аналогичного поиска:
в отношении ответа на верхний голос я создал этот код, который использует меньше функций только 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 />"; } }