ProfiPHPProfiPHP
Категория: Полезное в PHP

Рекурсивное удаление каталога

Для того, чтобы удалить пустой каталог, достаточно выполнить простую функцию Rmdir в параметре которой нужно указать путь к каталогу. Но как удалить каталог, который имеет подкаталоги и множество файлов?

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

Для этого достаточно воспользоваться следующей функцией:
function mf_removeDir( $path )
{
if ( $content_del_cat = glob( $path.'/*') )
{
foreach ( $content_del_cat as $object )
{
if ( is_dir( $object ) ) {
mf_removeDir( $object );
}
else {
@chmod( $object, 0777 );
unlink( $object );
}
}
}
@chmod( $object, 0777 );
rmdir( $path );
}
Ну и конечно вызвать данную функцию, например так:
mf_removeDir( $_SERVER['DOCUMENT_ROOT'].'/folder' );
Разберем работу данной функции. Сначала мы получаем список всех файлов внутри заданной в аргументе функции директории. Если в каталоге нет ничего, то сразу удаляем его. Если же существуют файлы или папки, то начинаем их всех перебирать. Если элемент - файл, то просто удаляем его. Если это каталог, то вызываем снова нашу функцию, передав в качестве параметра этот же каталог. В этом и заключается принцип рекурсии, функция вызывает сама себя. После ее вызова функция все начинается заново, но уже с другой директорией. В этой другой папке все начинается снова, поиск каталогов и файлов. Если это файл, удаляем, если каталог, снова сработает функция. В конце, когда все файлы и директории удалены, у нас удаляется уже пустой каталог. Ну и перед каждым удалением мы выставляем права доступа к файлу или папке 777. Более подробно о правах доступа: Права доступа к файлам и папкам.

Добавить комментарий

Имя:
Текст комментария: