В PHP как я рекурсивно удаляю все папки, которые не пусты?

Возможный дубликат:
Как я рекурсивно удаляю каталог и все его содержимое (файлы + поддиректории) в PHP?

Мне нужно рекурсивно удалить каталог и подкаталоги, которые не пусты. Я не могу найти какой-либо полезный класс или функцию для решения этой проблемы.

Заблаговременно спасибо за ваши ответы.

С первого комментария в официальной документации.

http://php.net/manual/en/function.rmdir.php

<?php // When the directory is not empty: function rrmdir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); } } reset($objects); rmdir($dir); } } ?> 

Отредактировано rmdir для rrmdir, чтобы исправить опечатку из очевидного намерения создать рекурсивную функцию.

Что-то вроде этого должно это сделать …

 function removeDir($path) { // Normalise $path. $path = rtrim($path, '/') . '/'; // Remove all child files and directories. $items = glob($path . '*'); foreach($items as $item) { is_dir($item) ? removeDir($item) : unlink($item); } // Remove directory. rmdir($path); } removeDir('/path/to/dir'); 

Это удаляет все дочерние файлы и папки, а затем удаляет папку верхнего уровня, переданную ей.

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

Чтобы рекурсивно удалить каталог, используйте это:

 function rrmdir($path) { return is_file($path)? @unlink($path): array_map(__NAMESPACE__ . '\rrmdir',glob($path.'/*'))==@rmdir($path); } 

Проверено только на unix.