Рекурсивный поиск файлов (PHP)
Я пытаюсь вернуть файлы в указанный каталог, используя рекурсивный поиск.
Я успешно достиг этого, однако я хочу добавить несколько строк кода, которые позволят мне указать определенные расширения, которые я хочу вернуть.
Например, верните только .jpg файлы в каталог.
Здесь мой код,
<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "<br/> \n";
}
?>
пожалуйста, дайте мне знать, что я могу добавить к вышеуказанному коду, чтобы добиться этого, спасибо
Ответы
Ответ 1
<?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";
}
?>
Ответ 2
Вы должны создать фильтр:
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)
...
Ответ 3
Попробуйте это, он использует массив допустимых типов файлов и только 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
и только возвращать файлы, которые соответствуют.
Ответ 4
Пусть 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);
Ответ 5
Вы можете просмотреть эту страницу об использовании glob() для аналогичного поиска:
http://www.electrictoolbox.com/php-glob-find-files/
Ответ 6
в отношении ответа на верхний голос я создал этот код, который использует меньше функций только 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 />";
}
}