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

ProFont. Действительно ли я - единственный все еще с помощью него?

26
задан Jan Hančič 7 December 2009 в 15:32
поделиться

3 ответа

<?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";
}
?>
34
ответ дан 28 November 2019 в 06:32
поделиться

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

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)
    ...
20
ответ дан 28 November 2019 в 06:32
поделиться

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

<?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 и возвращать только те файлы, которые совпадают.

7
ответ дан 28 November 2019 в 06:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: