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

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

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

Есть ли способ просто удалить все сразу?

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

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

где доступно.

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

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

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

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

Использовать это:

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

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

Иначе вы можете найти альтернативный метод здесь.

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

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

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

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

Одна безопасная и хорошая функция, размещенная в комментариях 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); }