PHP: Самый простой способ удалить папку (включая ее содержимое)


Функция rmdir() завершается ошибкой, если в папке содержатся какие-либо файлы. Я могу просмотреть все файлы в каталоге примерно так:

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

Есть ли какой-нибудь способ просто удалить все это сразу?

Author: Sam, 2009-08-19

7 answers

Ну, всегда есть

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

Там, где это возможно.

 47
Author: chaos, 2011-07-11 23:23:17

rrmdir() -- рекурсивное удаление каталогов:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
 61
Author: Yuriy, 2012-11-21 10:36:28
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
Author: Gaurang P, 2015-01-21 10:08:26

Согласно этому источнику;

Сэкономьте немного времени, если вы хотите очистить каталог или удалить его, и вы находитесь в Windows.

Используйте Это:

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

Вы можете использовать другой синтаксис DEL или любую другую утилиту оболочки. Возможно, вам придется разрешить службе взаимодействовать с рабочим столом, так как это моя текущая настройка, и я не изменяю ее, чтобы проверить это.

В противном случае вы могли бы найти альтернативный метод здесь.

 2
Author: Kevin Boyd, 2009-08-18 21:51:33

Попробуйте это:

exec('rm -rf '.$user_dir);
 1
Author: Ravinder Singh, 2013-01-02 11:22:35

Эта функция удаляет каталог и все подкаталоги и файлы:

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
Author: vinsa, 2015-03-25 23:02:15

Одна безопасная и хорошая функция, расположенная в комментариях php от lprent Это предотвращает случайное удаление содержимого каталогов символических ссылок, расположенных в текущем каталоге

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
Author: AMIB, 2015-09-13 21:12:51