Antwort an „Raketenwilli“ verfassen

Nach einigem Wühlen im Handbuch und kleineren Korrekturen hatte ich das Skript so weit, dass es hätte laufen müssen ... tat es aber nicht.

Warning: rmdir(/tmp/a): Directory not empty 
…
Warning:  rmdir(/tmp/a/b): Directory not empty

Ursache:

<?php
#/* 
exec("
mkdir /tmp/a;
mkdir /tmp/a/a;
touch /tmp/a/a/a;
touch '/tmp/a/a/a a';
touch /tmp/a/a/.a;
mkdir /tmp/a/b;
touch /tmp/a/b/a;
touch /tmp/a/b/b;
touch /tmp/a/b/c;
mkdir /tmp/a/c;
");
# */

	// Verzeichnisinhalt einsammeln
	$fileInfos = [];
	$rd = new RecursiveIteratorIterator(
			 new RecursiveDirectoryIterator( '/tmp/a' )
		  );
    $i=0;
	foreach ( $rd as $fileInfo ) {
		$fileInfos[] = $fileInfo;
		echo $i++ . ": " .  $fileInfo ->getPathname() . PHP_EOL;
	}

Ausgabe:

0: /tmp/a/c/.
1: /tmp/a/c/..
2: /tmp/a/b/c
3: /tmp/a/b/b
4: /tmp/a/b/.
5: /tmp/a/b/a
6: /tmp/a/b/..
7: /tmp/a/.
8: /tmp/a/a/.
9: /tmp/a/a/a a
10: /tmp/a/a/.a
11: /tmp/a/a/a
12: /tmp/a/a/..
13: /tmp/a/..

Deine Annahmen (Das Handbuch sagt nichts dazu) über die Sortierung des RecursiveDirectoryIterator sind also unzutreffend. Tatsächlich ist diese „zufällig“. Einen Parameter oder eine Methode zum Sortieren hab ich nicht gefunden, die müsste geschrieben werden.

Ich vermute, wenn ich das umbaue, geht jeder Vorteil der Nutzung der Objekte verloren.

Getestet mit PHP 8.1.2 (cli) (built: Apr 7 2022 17:46:26) (NTS) (Armbian/Ubuntu 22.04 LTS auf dem Raspi400, also aarch64)

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen