można rozszerzyć klasę RecursiveFilterIterator tak:
class ExtensionFilter extends RecursiveFilterIterator
{
/**
* Hold the extensions pass to the class constructor
*/
protected $extensions;
/**
* ExtensionFilter constructor.
*
* @param RecursiveIterator $iterator
* @param string|array $extensions Extension to filter as an array ['php'] or
* as string with commas in between 'php, exe, ini'
*/
public function __construct(RecursiveIterator $iterator, $extensions)
{
parent::__construct($iterator);
$this->extensions = is_array($extensions) ? $extensions : array_map('trim', explode(',', $extensions));
}
public function accept()
{
if ($this->hasChildren()) {
return true;
}
return $this->current()->isFile() &&
in_array(strtolower($this->current()->getExtension()), $this->extensions);
}
public function getChildren()
{
return new self($this->getInnerIterator()->getChildren(), $this->extensions);
}
Teraz można utworzyć wystąpienia RecursiveDirectoryIterator ze ścieżki jako argument tak:
$iterator = new RecursiveDirectoryIterator('\path\to\dir');
$iterator = new ExtensionFilter($iterator, 'xml, php, ini');
foreach($iterator as $file)
{
echo $file . '<br />';
}
To będzie lista plików w ramach tylko w bieżącym folderze.
Aby pobrać pliki w podkatalogach również przekazać $ iterator (ExtensionFIlter Iterator) do RecursiveIteratorIterator jako argument:
$iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
teraz uruchomić pętlę foreach tego iteracyjnej.Dostaniesz plików z określonym rozszerzeniem
Uwagi: - Upewnij się także, aby uruchomić ExtensionFilter przed RecursiveIteratorIterator, inaczej dostaniesz wszystkie pliki
Sprawdzanie, czy '$ file' jest' .' lub '..' jest bezużyteczne, jeśli już spróbujesz znaleźć określone rozszerzenie, ponieważ to już wyklucza te dwa przypadki. Ponadto, ze względów bezpieczeństwa, możesz chcieć usunąć ".." w ścieżce, aby uzyskać dostęp tylko do podkatalogu, a nie do katalogu rodzica lub rodzica. Rozważ to tylko wtedy, gdy twój katalog nie jest statyczny. – Yeti
To odpowiada na oryginalne pytanie, ale myślę, że pytanie powinno brzmieć "czy istnieje wyraźna składnia PHP, która może zrobić to za Ciebie?". Odpowiedź brzmi "tak", jak widać po najwyższej głosującej odpowiedzi. – cartbeforehorse