Изучение RecursiveDirectoryIterator: руководство по получению только файлов

RecursiveDirectoryIterator — это мощный класс PHP, который позволяет вам перемещаться по каталогам и получать информацию о файлах и подкаталогах внутри них. В этой статье мы сосредоточимся на использовании RecursiveDirectoryIterator для извлечения только файлов. Мы рассмотрим несколько методов с примерами кода, чтобы продемонстрировать, как эффективно выполнить эту задачу.

Метод 1: использование RecursiveIteratorIterator

$directory = '/path/to/directory';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
$files = [];
foreach ($iterator as $file) {
    if ($file->isFile()) {
        $files[] = $file->getPathname();
    }
}

Метод 2: фильтрация с помощью RecursiveCallbackFilterIterator

$directory = '/path/to/directory';
$iterator = new RecursiveIteratorIterator(new RecursiveCallbackFilterIterator(new RecursiveDirectoryIterator($directory), function ($current, $key, $iterator) {
    return $current->isFile();
})));
$files = [];
foreach ($iterator as $file) {
    $files[] = $file->getPathname();
}

Метод 3: расширение RecursiveDirectoryIterator

class FileOnlyIterator extends RecursiveDirectoryIterator
{
    public function accept()
    {
        return $this->current()->isFile();
    }
}
$directory = '/path/to/directory';
$iterator = new RecursiveIteratorIterator(new FileOnlyIterator($directory));
$files = [];
foreach ($iterator as $file) {
    $files[] = $file->getPathname();
}

Метод 4. Использование функции glob() с GLOB_BRACE

$directory = '/path/to/directory';
$files = glob($directory . '//*.{jpg,png,txt}', GLOB_BRACE | GLOB_ONLYDIR);

Метод 5: использование DirectoryIterator и isFile()

$directory = '/path/to/directory';
$iterator = new DirectoryIterator($directory);
$files = [];
foreach ($iterator as $file) {
    if ($file->isFile()) {
        $files[] = $file->getPathname();
    }
}

В этой статье мы рассмотрели различные методы получения только файлов с помощью RecursiveDirectoryIterator в PHP. Мы обсудили использование RecursiveIteratorIterator, RecursiveCallbackFilterIterator, расширение RecursiveDirectoryIterator, использование функции glob() с GLOB_BRACE и использование DirectoryIterator с методом isFile(). Каждый метод предлагает уникальный подход для достижения желаемого результата. Реализуя эти методы, вы можете эффективно извлекать только файлы из каталогов ваших проектов PHP.