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 式から新しいディレクトリイテレータを作成します。
directory
が存在しない場合に
UnexpectedValueException をスローします。
directory
が空文字列の場合に
ValueError をスローします。
バージョン | 説明 |
---|---|
8.0.0 |
directory が空文字列の場合に
ValueError をスローするようになりました。
これより前のバージョンでは、
RuntimeException をスローしていました。
|
例1 GlobIterator の例
<?php
$iterator = new GlobIterator('*.dll', FilesystemIterator::KEY_AS_FILENAME);
if (!$iterator->count()) {
echo 'No matches';
} else {
$n = 0;
printf("Matched %d item(s)\r\n", $iterator->count());
foreach ($iterator as $item) {
printf("[%d] %s\r\n", ++$n, $iterator->key());
}
}
?>
上の例の出力は、 たとえば以下のようになります。
Matched 2 item(s) [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:<?phpclass 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:<?phpstream_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();}?>