Nagut.
Zur Belohnung noch schnell die Funktion zum rekursiven Löschen eines ganzen Verzeichnisses:
<?php
### rmdirRecursive löscht ein Verzeichnis rekursiv.
## Parameter:
## $dirName : Verzeichnis
## $verbose : true - es wird ein Array mit allen gelöschten
## Dateien retourniert
## $verbose : false - es wird nur der Erfolg (true/false) geliefert.
## $errorType : siehe https://www.php.net/manual/de/errorfunc.constants.php
function rmdirRecursive(
$dirName,
$verbose = false,
$errorType = E_USER_ERROR
) {
if ( ! is_dir( $dirName ) ) {
trigger_error ( "'$dirName' existiert nicht oder ist kein Verzeichnis.", $errorType );
return false;
}
if ( $verbose ) {
$return = [];
} else {
$return = true;
}
foreach( scandir( $dirName ) as $item ) {
if( $item === ".." or $item === ".") {
continue;
} else {
$dso = $dirName . '/' . $item;
if (
is_file( $dso )
or is_link( $dso )
) {
if ( ! unlink( $dso ) ) {
trigger_error ( "'$dso' konnte nicht gelöscht werden." );
return false;
} else {
$return[] = $dso;
}
} else {
$r = rmdirRecursive( $dso, $verbose, $errorType );
if ( false === $r ) {
trigger_error ( "'$dso' konnte nicht gelöscht werden." );
return false;
} else {
if ( $verbose ) {
if ( is_array( $r ) ) {
foreach ( $r as $i ) {
$return[] = $i;
}
}
}
}
}
}
}
if ( rmdir( $dirName ) ) {
if ( $verbose ) {
$return[] = $dirName;
}
return $return;
} else {
trigger_error ( "'$dirName' konnte nicht gelöscht werden.", $errorType );
return false;
}
}
## Usage example:
# print_r( rmdirRecursive( '/tmp/a', true, E_USER_ERROR ) );