Frage

Die rmdir() Funktion schlägt fehl, wenn die Ordner alle Dateien enthalten. Ich kann eine Schleife durch alle der Dateien in dem Verzeichnis mit so etwas wie folgt aus:

foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue;
    unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);

Gibt es eine Möglichkeit, nur alles auf einmal löschen?

War es hilfreich?

Lösung

Nun, es gibt immer

system('/bin/rm -rf ' . escapeshellarg($dir));

Dabei steht zur Verfügung.

Andere Tipps

rrmdir() - rekursiv löschen Verzeichnisse:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
function delete_files($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir") 
           delete_files($dir."/".$object); 
        else unlink   ($dir."/".$object);
      }
    }
    reset($objects);
    rmdir($dir);
  }
 }

Wie pro dieser Quelle;

einige Zeit sparen, wenn Sie ein Verzeichnis reinigen wollen oder löschen und Sie sind auf Fenster.

Mit diesem:

    chdir ($file_system_path);
    exec ("del *.* /s /q");

Sie können andere verwenden DEL Syntax oder andere Shell-util. Sie können, damit der Dienst haben, mit dem Desktop zu interagieren, als dass meine aktuelle Einstellung ist, und ich bin nicht ändere es, dies zu prüfen.

sonst könnten Sie eine alternative Methode finden Sie hier.

Versuchen Sie folgendes:

exec('rm -rf '.$user_dir);

Diese Funktionen erzeugen das Verzeichnis löschen und alle Unterverzeichnisse und Dateien:

function DelDir($target) {
    if(is_dir($target)) {
        $files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

        foreach( $files as $file )
        {
            DelDir( $file );      
        }

        rmdir( $target );
    } elseif(is_file($target)) {
        unlink( $target );  
    }
}

Eine sichere und gute Funktion in PHP Kommentaren von lprent gelegen Es verhindert Inhalte von symbolischen Links Verzeichnisse in aktuellem Verzeichnis

versehentliches Löschen
public static function delTree($dir) { 
   $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
      (is_dir("$dir/$file") && !is_link($dir)) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
  } 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top