PHP 8.4.0 RC2 available for testing

GlobIterator::__construct

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

GlobIterator::__construct Создаёт итератор директории, используя glob-выражение

Описание

public GlobIterator::__construct(string $pattern, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)

Создаёт новый итератор директории на основе glob-выражения.

Список параметров

pattern

Шаблон glob().

flags

Флаги настроек. Флаги можно задавать битовой маской констант FilesystemIterator.

Ошибки

Выбрасывает исключение UnexpectedValueException, если директория directory не существует.

Выбрасывает исключение ValueError, если параметр directory содержит пустую строку.

Список изменений

Версия Описание
8.0.0 Теперь выбрасывает исключение ValueError, если параметр directory содержит пустую строку. Ранее выбрасывалось исключение RuntimeException.

Примеры

Пример #1 Пример использования GlobIterator

<?php
$iterator
= new GlobIterator('*.dll', FilesystemIterator::KEY_AS_FILENAME);

if (!
$iterator->count()) {
echo
'Нет совпадений';
} else {
$n = 0;

printf("Найдено элементов: %d \r\n", $iterator->count());

foreach (
$iterator as $item) {
printf("[%d] %s\r\n", ++$n, $iterator->key());
}
}
?>

Вывод приведённого примера будет похож на:

Найдено элементов: 2
[1] php5ts.dll
[2] php_gd2.dll

Смотрите также

  • DirectoryIterator::__construct() - Создаёт новый итератор каталогов из пути
  • GlobIterator::count() - Определяет количество директорий и файлов
  • glob() - Находит файловые пути, которые совпадают с шаблоном

add a note

User Contributed Notes 2 notes

up
3
info at ensostudio dot ru
4 years ago
Fix problem with braces in template:
<?php
class GlobStreamWrapper
{
private
$generator;

protected function
createGenerator(array $paths): Generator
{
return yield from
$paths;
}

public function
dir_opendir(string $pattern, int $options = 0): bool
{
$pattern = substr($pattern, 7); // crop 'glob://' prefix
$pattern = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $pattern);
$paths = (array) glob($pattern, GLOB_BRACE | GLOB_NOSORT);
$this->generator = $this->createGenerator($paths);
return
$this->generator->valid();
}

public function
dir_readdir(): string
{
$path = $this->generator->current() ?: '';
$this->generator->next();
return
$path;
}

public function
dir_rewinddir(): bool
{
$this->generator->rewind();
return
$this->generator->valid();
}

public function
dir_closedir(): bool
{
$this->generator = null;
return
true;
}
}
?>
Replace glob wrapper:
<?php
stream_wrapper_unregister
('glob');
stream_wrapper_register('glob', 'GlobStreamWrapper');
?>
Example:
<?php
$iterator
= new GlobIterator(__DIR__ . '/{application,system}/src/*.php');
while (
$iterator->valid()) {
echo
$iterator->current()->getFilename() . '</br>';
$iterator->next();
}
?>
up
2
ozana at omdesign dot cz
10 years ago
GlobIterator doesn’t have a way to support GLOB_BRACE!

<?php
$iterator
= new GlobIterator(getcwd. '/*.{php,txt}'); // generate an empty array
?>
To Top