GlobIterator doesn’t have a way to support GLOB_BRACE!
<?php
$iterator = new GlobIterator(getcwd. '/*.{php,txt}'); // generate an empty array
?>
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
GlobIterator::__construct — Создаёт итератор директории, используя glob-выражение
$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
GlobIterator doesn’t have a way to support GLOB_BRACE!
<?php
$iterator = new GlobIterator(getcwd. '/*.{php,txt}'); // generate an empty array
?>
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();
}
?>