web-dev-qa-db-fra.com

PHP: le moyen le plus simple de supprimer un dossier (y compris son contenu)

La fonction rmdir() échoue si le dossier contient des fichiers. Je peux parcourir tous les fichiers du répertoire avec quelque chose comme:

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

Existe-t-il un moyen de tout supprimer en une seule fois?

32
Chris B

Eh bien, il y a toujours

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

si disponible.

47
chaos

rrmdir() - efface récursivement les répertoires:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
61
Yuriy
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);
  }
 }
3
Gaurang P

Selon this source;

Gagnez du temps si vous souhaitez nettoyer un répertoire ou le supprimer et que vous êtes sur Windows.

Utilisez ceci:

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

Vous pouvez utiliser une autre syntaxe DEL, ou tout autre utilitaire Shell . Il se peut que vous deviez autoriser le service à interagir avec le bureau, car c'est mon paramètre actuel et je ne le modifie pas pour le tester.

Sinon, vous pouvez trouver une méthode alternative ici.

2
Kevin Boyd

Cette fonction supprime le répertoire et tous les sous-répertoires et fichiers:

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 );  
    }
}
1
vinsa

Essaye ça : 

 exec ('rm -rf'. $ user_dir); 
1
Ravinder Singh

Une fonction sûre et efficace située dans les commentaires php de lprentIl empêche la suppression accidentelle du contenu des répertoires de liens symboliques situés dans le répertoire en cours.

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); 
  } 
0
AMIB