среда, 18 августа 2010 г.

Удаление папки с файлами или рекурсивное удаление каталога на PHP

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


Вот собственно и функция:

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 "Удаляемой папки не существует или это файл!";
}
}

Опишу немного логику данной функции. Функция получает в качестве параметра путь к папке. Первое что она делает это проверяет, существует ли эта папка и папка это вообще если результат проверки положительный то открывает папку на чтение и запускается цикл чтения папки, получения всего ее содержимого (папки, файлы, ссылки) далее не забываем исключать папки '.'(точка) и '..'(две точки) первое - ссылка на этот каталог, второе - ссылка на каталог уровнем выше. После этого меняем права доступа к файлу или каталогу и если это папка то заходим в нее и удаляем все что в ней, иначе это файл или ссылка и тогда просто удаляем.


Пример использования функции:


// путь от корня сайта
$DeletedFolder='/folder';

RemoveDir($_SERVER['DOCUMENT_ROOT'].$DeletedFolder);


источник статьи: http://slawutich.pp.ua/php/58-removedir-php.html

Комментариев нет:

Отправить комментарий