LonghornPHP 2026

GlobIterator::__construct

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

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

Описание

public function 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() - Находит файловые пути, которые совпадают с шаблоном

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 2 notes

up
3
info at ensostudio dot ru
6 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
12 years ago
GlobIterator doesn’t have a way to support GLOB_BRACE!
<?php
$iterator = new GlobIterator(getcwd. '/*.{php,txt}'); // generate an empty array
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /