Antwort an „Raketenwilli“ verfassen

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 ) );
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