Sie können die RecursiveFilterIterator Klasse wie folgt erweitern:
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);
}
Jetzt können Sie RecursiveDirectoryIterator mit Pfad als Argument wie folgt instanziiert:
$iterator = new RecursiveDirectoryIterator('\path\to\dir');
$iterator = new ExtensionFilter($iterator, 'xml, php, ini');
foreach($iterator as $file)
{
echo $file . '<br />';
}
Diese nur Dateien im aktuellen Ordner auflistet.
die Dateien in Unterverzeichnissen Um auch zu erhalten, übergeben die $ iterator (ExtensionFIlter Iterator) zu RecursiveIteratorIterator als Argument:
$iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
nun die foreach-Schleife auf diesem Iterator laufen.Sie werden die Dateien mit den angegebenen Erweiterung
Hinweis erhalten: - Vergewissern Sie sich auch die ExtensionFilter vor RecursiveIteratorIterator laufen, sonst werden Sie alle Dateien erhalten
Überprüfen, ob '$ file'' .' oder '..' ist, ist nutzlos, wenn Sie bereits versuchen, eine bestimmte Erweiterung zu finden, da diese Fälle bereits ausgeschlossen werden. Aus Sicherheitsgründen möchten Sie möglicherweise auch '..' aus dem Pfad entfernen, sodass nur auf ein Unterverzeichnis und nicht auf ein Geschwister- oder Elternverzeichnis zugegriffen werden kann. Beachten Sie dies nur, wenn Ihr Verzeichnis nicht statisch ist. – Yeti
Dies beantwortet die ursprüngliche Frage, aber ich denke, die Frage sollte wirklich sein "gibt es eine explizite PHP-Syntax, die das für Sie tun kann?". Die Antwort lautet ja, wie Sie an der höchsten, nach dem Votum angenommenen Antwort sehen. – cartbeforehorse