Функция 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); }