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 — Construit un itérateur de type glob
$pattern
, int $flags
= FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)Construit un itérateur de type glob.
pattern
Un motif (pattern) glob().
flags
Les options, qui peuvent être un champ de bits de constantes de classe FilesystemIterator.
Lance une exception UnexpectedValueException si le répertoire n'existe pas.
Lance une exception ValueError
si directory
est une chaîne vide.
Version | Description |
---|---|
8.0.0 |
Lance désormais une exception ValueError
quand directory est une chaîne vide ;
Auparavant, une RuntimeException était lancée.
|
Exemple #1 Exemple avec 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());
}
}
?>
Résultat de l'exemple ci-dessus est similaire à :
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:
<?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();
}
?>