Question

La fonction rmdir() échoue si le dossier contient tous les fichiers. Je peux boucle à travers tous les fichiers dans le répertoire avec quelque chose comme ceci:

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

Est-il possible de supprimer juste à la fois?

Était-ce utile?

La solution

Eh bien, il y a toujours

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

le cas échéant.

Autres conseils

rrmdir() - supprimer récursive répertoires:

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

par cette source ;

Enregistrer un certain temps, si vous voulez nettoyer un répertoire ou le supprimer et vous êtes sur Windows.

Utilisez ceci:

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

Vous pouvez utiliser la syntaxe autre DEL, ou tout autre util shell. Vous devrez peut-être permettre au service d'interagir avec le bureau, comme c'est mon réglage actuel et je ne change pas à tester.

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

Essayez ceci:

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

auj supprimer 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 );  
    }
}

Une fonction sûre et bien situé dans les commentaires php par lprent Il empêche la suppression accidentelle contenu des répertoires de liens symboliques situés dans le répertoire courant

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); 
  } 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top