Viel zu oft wird die Frage “Wie lösche ich ein Verzeichnis rekursiv?” mit einem 100-Zeilen Skript beantwortet. Schade eigentlich, denn viele Programmierer haben sich immer noch keine Mühe gemacht die Änderungen von PHP5 wahrzunehmen. Dabei würde sich ein genauerer Blick lohnen, die Antwort auf diese Frage ist seither sehr kurz und einfach geworden:

function recursive($dest)
{
	$list = array_diff(scandir($dest), array('.', '..'));
	foreach ($list as $value) {
		$file = $dest.'/'.$value;
		if (is_dir($file)) { recursive($file) } else { unlink($file) }
	}
	return rmdir($dest);
}

Wie wir sehen, passt das sehr einfach in 9 Zeilen. Was geschieht denn genau? Zuerst lesen wir das Verzeichnis, das wir beim Funktionsaufruf mitgegeben haben aus (scandir()) und entfernen danach “.” (aktuelles Verzeichnis) und “..” (übergeordnetes Verzeichnis). Das muss sein, denn sonst würden wir bei ersterem in eine Endlosschleife geraten und bei letzterem über das Ziel hinaus schiessen und übergeordnete Dateien löschen. Sobald wir also unsere Liste haben, gehen wir sie durch und prüfen ob es sich um ein Verzeichnis handelt oder nicht. Ist es eins, so wird die gesamte Prozedur nochmal darauf angewandt – andernfalls wird die Datei einfach gelöscht und das geht dann so lange bis nichts mehr übrig ist.

Verwendet wird es übrigens folgendermassen:

if (recursive('./bilder')) {
	print "super, hat geklappt.";
} else {
	print "ohje, bestimmt hab ich keine berechtigung dazu.";
}

Schlägt der Funktionsaufruf fehl, erscheinen (je nach tiefe der Verzeichnise) von PHP generierte Fehlermeldungen.