Raketenwilli: PHP: Verzeichnis rekursiv löschen (neue Version, Diskussion)

Beitrag lesen

Gesagt:

Einen Parameter oder eine Methode zum Sortieren hab ich nicht gefunden, die müsste geschrieben werden

Getan:

	// Verzeichnisinhalt einsammeln
	$fileInfos = [];
	$rd = new RecursiveIteratorIterator(
			 new RecursiveDirectoryIterator( $dirName )
		  );
    $i=0; $dtos=[];
	foreach ( $rd as $fileInfo ) {
		$fileInfos[$fileInfo ->getPathname()] = $fileInfo;
		$dtos[] = $fileInfo ->getPathname();
	}
	asort( $dtos );
	$dtos = array_reverse( $dtos );
	print_r( $dtos ); exit;

Das liefert dann endlich brauchbares:

    Fund                 # Aktion
    ######################################
    [0] => /tmp/a/c/..   # Ignorieren
    [1] => /tmp/a/c/.    # rmdir /tmp/a/c
    [2] => /tmp/a/b/c    # Löschen
    [3] => /tmp/a/b/b    # Löschen
    [4] => /tmp/a/b/a    # Löschen
    [5] => /tmp/a/b/..   # Ignorieren
    [6] => /tmp/a/b/.    # rmdir /tmp/a/b
    [7] => /tmp/a/a/a a  # Löschen
    [8] => /tmp/a/a/a    # Löschen
    [9] => /tmp/a/a/.a   # Löschen
    [10] => /tmp/a/a/..  # Ignorieren
    [11] => /tmp/a/a/.   # rmdir /tmp/a/a/
    [12] => /tmp/a/..    # Ignorieren
    [13] => /tmp/a/.     # rmdir /tmp/a

Jetzt könnte ich über die sortierten $dtos das richtige Objekt aus $fileInfos rausziehen, ::getFilename() untersuchen, (wenn '..') das Item ignorieren oder (wenn '.') das leere Verzeichnis darunter löschen oder die Datei löschen.

Nur habe ich da ja schon den Dateiname.

Fazit: Der Schatz [RecursiveDirectoryIterator](https://www.php.net/manual/de/class.recursivedirectoryiterator.php) ist einer. Aber halt dann, wenn ich mehr und andere Informationen verarbeiten will - zum Löschen ist dessen Nutzung zu viel Aufwand: Quasi der Versuch, mit einem 1000PS-Traktor und einer riesigen Maschine Nadeln aus einem Heuhaufen zu ziehen, sie dabei zu vermessen und deren Hersteller, Farbe, Material, Härtegrad zu bestimmen - wobei aber doch eigentlich der Heuhaufen nur von Nadeln befreit werden soll... was ein billiger Magnet ratzfatz erledigt.