Рекурсивне видалення каталогу з файлами на 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.