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.