Рекурсивное удаление каталога с файлами на PHP.
Частенько сталкиваюсь с задачей удаления папки со всем вложенным в нее содержимым, а постоянно изобретать велосипед надоело, вот нашел отличную функцию на PHP, которая рекурсивно бежит по всем папкам удаляя файлы и после этого каталог.
Вот собственно и функция:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function RemoveDir($path) { if(file_exists($path) && is_dir($path)) { $dirHandle = opendir($path); while (false !== ($file = readdir($dirHandle))) { if ($file!='.' && $file!='..')// исключаем папки с назварием '.' и '..' { $tmpPath=$path.'/'.$file; chmod($tmpPath, 0777); if (is_dir($tmpPath)) { // если папка RemoveDir($tmpPath); } else { if(file_exists($tmpPath)) { // удаляем файл unlink($tmpPath); } } } } closedir($dirHandle); // удаляем текущую папку if(file_exists($path)) { rmdir($path); } } else { echo "Удаляемой папки не существует или это файл!"; } } |
Опишу немного логику данной функции. Функция получает в качестве параметра путь к папке. Первое что она делает это проверяет, существует ли эта папка и папка это вообще если результат проверки положительный то открывает папку на чтение и запускается цикл чтения папки, получения всего ее содержимого (папки, файлы, ссылки) далее не забываем исключать папки ‘.'(точка) и ‘..'(две точки) первое — ссылка на этот каталог, второе — ссылка на каталог уровнем выше. После этого меняем права доступа к файлу или каталогу и если это папка то заходим в нее и удаляем все что в ней, иначе это файл или ссылка и тогда просто удаляем.
Пример использования функции:
1 2 3 |
// путь от корня сайта $DeletedFolder='/folder'; RemoveDir($_SERVER['DOCUMENT_ROOT'].$DeletedFolder); |

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.