Всем привет.
Есть зц, с возможность создания бесконечной вложенности папок. Ну думаю вы поняли.
В таблице папок есть поле id_folder (айди папки, в которой находится данная папка), files (определяет тип папки. 1 - папка с файлами, 0 - папка с папками)
Тк вот не совсем могу понять, как сделать удаление.
Допустим есть такая структура:
papochka1(files 0)
--podpapochka11(files0)
----podpodpapaka112(files1)
----podpodpapaka112(files1)
----podpodpapaka112(files1)
--podpapochka12(files1)
--podpapochka13(files0)
----podpodpapaka112(files1)
----podpodpapaka112(files0)
------podpodpodpapaka112(files1)
------podpodpodpapaka112(files1)
--podpapochka14(files1)
papochka2(files 0)
--podpapochka11(files1)
--podpapochka11(files1)
papochka3(files 1)
papochka4(files1)
Как организовать удаление? Например я хочу удалить papochka1, нужно, что бы удалились сначала файлы из вложенных папок, потом папки. Ну думаю вы поняли пою мысль.
Удаляем папку. Дальше скрипт перебирает эту паку на вложенность другой папки. Если вложенная папка имеет тип папки с папками, перебираем папки в ней. Если папка с файлами, просто удаляем файлы и саму папку (это вроде не сложно). Но вот как быть с вложенными папками я не могу сообразить. Или мб папки между собой в базе не достаточно связанны. Мб какое то поле еще добавить нужно. В общем помогите. Подтолкните пжлст в нужную сторону
function rrmdir($dir) {
$files = array_diff(scandir($dir), array('.', '..'));
foreach($files as $file) {
(is_dir($dir .'/'. $file)) ? rrmdir($dir .'/'. $file) : unlink($dir .'/'. $file);
}
rmdir($dir);
}
Блин точно. Можно же функцию в функции вызвать. Этому же еще даже в школе на паскале учили ) Спасибо)
Есть еще такой вриант.
$dir = $_SERVER['DOCUMENT_ROOT'].'/test/';
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($iterator as $path)
$path->isDir() ? rmdir($path) : unlink($path);
rmdir($dir);