удаление файлов и папок из директории

dist

Новичок
удаление файлов и папок из директории

Добрый день. вот такой есть код для удаления файлов и папок из директории, подскажите, кто разбирается в PHP, смысл этого кода, а то я в php не соображаю, мне главное, чего нибудь лишнего не удалить
<?
function full_del_dir ($directory)
{
$dir = opendir($directory);
while(($file = readdir($dir)))
{
if ( is_file ($directory."/".$file))
{
unlink ($directory."/".$file);
}
else if ( is_dir ($directory."/".$file) &&
($file != ".") && ($file != ".."))
{
full_del_dir ($directory."/".$file);
}
}
closedir ($dir);

echo("Файлы каталога успешно удалены");
}
full_del_dir ("backup")
?>
 

damngood

Мозг был, но ушел...
обычная функция рекурсивного удаления. Что тебя интересует?

-~{}~ 15.12.09 12:51:

Найди 10 отличий)))
http://articles.org.ru/cn/showdetail.php?cid=5458
 

Фанат

oncle terrible
Команда форума
вроде, папки она не удаляет
damngood, его интересует безопасность данного кода
 

dist

Новичок
Спасибо за ссылку.
http://articles.org.ru/cn/showdetail.php?cid=5458
по ссылке там удаляет еще и саму директорию я так понимаю
rmdir ($directory); после того как все файлы в ней удалены.
 

dist

Новичок
почитал сейчас про rmdir..., значит нормальный код? можно его использовать для удаления непустых директорий? а то у меня хостер не дает удалять созданные Sypex Dumper дампы базы данных. С помощью этого кода и удаляю... то что уже не нужно, да я хотел спросить, на счет его корректности, не могу ли чего нибудь лишнего удалить, например в случае, если например директория будет уже пустая или с правами что нибудь будет не так или в каком нибудь другом случае?
 

damngood

Мозг был, но ушел...
dist
Если прав нету, то функция ничего не удалит, даже файлы не тронет. А вот с точки зрения безопасности ничего страшного здесь нет. Как раз там стоит запрет на выход выше удаляемой папки через . и ..
 

dimagolov

Новичок
damngood, в full_del_dir можно передать все, что угодно, с любым кол-вом ..
 

damngood

Мозг был, но ушел...
dimagolov
я имел в виду то, что

($file != ".") && ($file != ".."))
{
full_del_dir ($directory."/".$file);
}

не даст ей выйти выше уровнем, чем удаляемая папка, или я не прав?
 

dimagolov

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

Фанат

oncle terrible
Команда форума
damngood
где в этом коде проверяется каталог, на который мы выходим?
 

damngood

Мозг был, но ушел...
dimagolov
ну я об этом и хотел сказать((( фигово выражаю мысли
 

dimagolov

Новичок
damngood, ну и это никак не отражается на безопасности. вообще никак, просто делает алгоритм рабочим.
 

dist

Новичок
если файл с кодом в том виде, который указан в первом посте, я положу в папку, которая является родительской по отношению к папке backup, и код мне никто не поменяет, то этот скрипт мне удалит только файлы, которые находятся в этой папке backup, и ни при каких условиях не удалит файлы в других папках? я правильно понимаю, или все же могут быть здесь исключения?
 
Сверху