Быстрый способ удаления папки на PHP
В РНР для удаления файла существует функция unlink(), для удаления пустого каталога — rmdir(). Что делать если нужно рекурсивно удалить папку со всеми файлами и подкаталогами. На помощь приходит glob() в связке с array_map().
Заметьте, что в функции нет ни единого цикла.
function removeDir($path) { if (is_file($path)) { @unlink($path); } else { array_map('removeDir',glob('/*')) == @rmdir($path); } @rmdir($path); }
Пример вызова
$path = $_SERVER['DOCUMENT_ROOT'].'/test'; removeDir($path);
Спасибо за идею, но у меня эта функция не сработала так, как хотелось бы. Я немного подкорректировал функцию и вызов. Теперь она удаляет указанную папку со всеми подпапками и файлами:
function removeDir($path) {
return is_file($path)?
@unlink($path):
array_map('removeDir',glob($path."/*"))==@rmdir($path);
}
// Пример вызова
$path = $_SERVER['DOCUMENT_ROOT'].'/test';
removeDir($path);
Не работает. Не удаляет самую верхнюю директорию. Вот рабочий пример
function removeDirectory($dir) {
if ($objs = glob($dir.»/*»)) {
foreach($objs as $obj) {
is_dir($obj) ? removeDirectory($obj) : unlink($obj);
}
}
rmdir($dir);
}
Да, вы правы — так будет лучше. Поправил в статье.
А если removeDir в классе определять? Как указывать первый параметр array_map?
Все достаточно просто
array_map(array($this, 'removeDir'), glob(...))
Вы не правы насчет не используются цикла как рас используются вы применяется callback функцию что рекурсивно вызывается на каждое значение массива
Визуально в коде нет ни одного цикла. Код читается проще. О внутреннем устройстве функций РНР речи не идет.
А можете объяснить нубу почему эта функция у меня ругается на фигурные скобки в условии, а если их удалить, то начинает ругаться на собаку?
Текст ошибки в студию!
А, да всё… Я решил проблему — не использую этот скрипт. Всё равно там же используется скрипт создания субдомена через cPanel. Я его немного дописал и он ещё и папки теперь удаляет.
То есть ошибку не покажите?
Ну он пишет «неожиданный ‘{‘ на N строке» и тоже самое с @
Понятно
в стоке 2 не хватает скобки
if (is_file($path) {
вот и ошибка
Спасибо, поправил
Вообще чувак cPanel дописывает, такой фигни не заметил =) гы.
Есть такое дело 🙂
Спасибо, пригодилось
Да, пожалуйста )))
серврере ложится надо что-то полегче
Service Temporarily Unavailable
The server closed the connection without sending any data.
The server is temporarily unable to service your request due to maintenance downtime or capacity problems.
Due to heavy load on the server, connections may be temporarily blocked from locations that fetch an unusually high number of pages.
We apologize for the inconvenience.