CHILD_FIRST ist super. Das hatte ich nicht gesehen und das macht die Zwischenspeicherung in einem Array unnötig.
Auch wenn Du es nicht selbst (durch notierten Code) tust - im Hintergrund wird die Klasse RecursiveIteratorIterator
genau das sehr wohl tun. Immerhin nimmt die ja beim Construct genau einen solchen Array bzw. ein Traversable entgegen - den der FilesystemIterator
ergo auch liefern bzw. sein muss. Aber spätestens für die intern stattfindende Sortierung wird es wohl doch ein Array sein.
Man sollte womöglich den Speicherverbrauch und die Performance nicht ganz aus den Augen verlieren: Immerhin ist der FilesystemIterator eine „eierlegende Wollmilchsau“ und dürfte einigen Aufwand betreiben um die vielen gebotenen, aber hier nutzlosen Informationen zu erlangen. (Klar könnte man einen Hifetext ins Error-Log schreiben der bis runter zum Inode alle Informationen gibt, warum sich eine Datei oder ein Verzeichnis nicht löschen ließ...wobei der FilesystemIterator dann aber an acl
, erst recht an den „Ausführungsverhinderern“ und readonly gemounteten Dateisystemen scheitert - die kennt er nicht. )
Und wenn ich dann sehe, wie lange das ganze Gewühle im Handbuch dauert um meine 50 Zeilen „primitiven Code“ zu ersetzen kann ich auch nur ein „Naja. Mancher will es so…“ seufzen.
Das es ja um das Wiki ging:
Interessanter und sinnvoller wäre es vielleicht zu zeigen, wie man den „Spaß“ auf Verzeichnisse begrenzt, die ein Kindverzeichnis eines temporären Verzeichnisses sind. (Etwas wie "/tmp/" oder "/temp/" im Pfadname haben.)