дерево любой структуры посторенно след. образом
Меню1(id=1, pid=0)
Под меню1.1.(id=3 pid=1)
Под меню1.2.(id=4 pid=1)
Под меню 1.2.1 (id=5 pid=4)
Под меню 1.2.2 (id=9 pid=4)
Под меню 1.2.2.1 (id=11 pid=9)
Под меню1.3.(id=7 pid=1)
т.е., если мы хотим создать подкаталог меню, то мы присваиваем под каталогу в значение pid значение id из меню
Меню1(id=1, pid=0)
Под меню1.1.(id=3 pid=1)
бъюсь уже несколько дней, все данные храняться в базе Mysql.
Спустя 1 час, 22 минуты, 46 секунд (17.01.2008 - 16:26) vasa_c написал(а):
function Удаление_Каталога_с_Подкаталогами($id)
{
Список_Подкаталогов = Получить_Список_Подкаталогов($id)
foreach(Список_Подкаталогов as Подкаталог) {
Удаление_Каталога_с_Подкаталогами(Подкаталог)
}
Удалить_Запись_из_Базы($id);
}
Если сколько-нибудь свежая версия mysql, это всё делается на её уровне связью по ключам.
И в дальнейшем вместо фраз "бьюсь несколько дней" приводите свои попытки и рассказывайте что не получилось
{
Список_Подкаталогов = Получить_Список_Подкаталогов($id)
foreach(Список_Подкаталогов as Подкаталог) {
Удаление_Каталога_с_Подкаталогами(Подкаталог)
}
Удалить_Запись_из_Базы($id);
}
Если сколько-нибудь свежая версия mysql, это всё делается на её уровне связью по ключам.
И в дальнейшем вместо фраз "бьюсь несколько дней" приводите свои попытки и рассказывайте что не получилось
Спустя 1 год, 19 дней, 18 часов, 36 минут, 29 секунд (9.02.2009 - 11:02) Гость_Ольга написал(а):
Мне по работе нужно удалиьть все дочернии файлики из файловой системы и его самого (язык PHP). Вот что я родила:
// у $file_name на конце должна быть /
function RecurciveDeleteChildFiles($file_name){
if(substr($file_name, -1)!="\\")
{echo ' -- 1 -- unlink'.$file_name; unlink($file_name); return;}
$files=glob($file_name.'*',GLOB_MARK);
if(!$files)
{echo ' -- 2 -- rmdir '.$file_name;rmdir($file_name) ; return;}
foreach($files as $file)
{
RecurciveDeleteChildFiles($file);
}
echo "\r\n".' end rmdir = '.$file_name;
RecurciveDeleteChildFiles($file_name);
return;
}
Сложность в том, что если $file_name имеет дочернии доки, его rmdirом не удалить.
// у $file_name на конце должна быть /
function RecurciveDeleteChildFiles($file_name){
if(substr($file_name, -1)!="\\")
{echo ' -- 1 -- unlink'.$file_name; unlink($file_name); return;}
$files=glob($file_name.'*',GLOB_MARK);
if(!$files)
{echo ' -- 2 -- rmdir '.$file_name;rmdir($file_name) ; return;}
foreach($files as $file)
{
RecurciveDeleteChildFiles($file);
}
echo "\r\n".' end rmdir = '.$file_name;
RecurciveDeleteChildFiles($file_name);
return;
}
Сложность в том, что если $file_name имеет дочернии доки, его rmdirом не удалить.
Спустя 29 секунд (9.02.2009 - 11:03) Guest написал(а):
Так вот вопрос. Может есть способ попроще?
Спустя 4 минуты, 36 секунд (9.02.2009 - 11:07) olgatcpip написал(а):

Спустя 2 часа, 4 минуты, 48 секунд (9.02.2009 - 13:12) olgatcpip написал(а):
// у $file_name на конце должна быть /
function RecurciveDeleteChildFiles($file_name){
if(!is_dir($file_name) && !is_file($file_name)){echo "\r\n".'no dir!'; return;}
if(mb_substr($file_name, -1)!="\\")
{echo ' -- 1 -- unlink'.$file_name; unlink($file_name); return;}
$files=glob($file_name.'*',GLOB_MARK);
echo "\r\n";print_r($files);
if(!$files)
{echo ' -- 2 -- rmdir '.$file_name; rmdir($file_name) ; return;}
foreach($files as $file)
{
RecurciveDeleteChildFiles($file);
}
echo "\r\n".' end rmdir = '.$file_name;
RecurciveDeleteChildFiles($file_name);
//array_walk($files, 'RMdir');
return;
//unlink(substr($file_name, 0, -1));
}
Этот более правильный
Но вопрос остался: есть попроще код удаления дочерних всех каталогов и файлов?
function RecurciveDeleteChildFiles($file_name){
if(!is_dir($file_name) && !is_file($file_name)){echo "\r\n".'no dir!'; return;}
if(mb_substr($file_name, -1)!="\\")
{echo ' -- 1 -- unlink'.$file_name; unlink($file_name); return;}
$files=glob($file_name.'*',GLOB_MARK);
echo "\r\n";print_r($files);
if(!$files)
{echo ' -- 2 -- rmdir '.$file_name; rmdir($file_name) ; return;}
foreach($files as $file)
{
RecurciveDeleteChildFiles($file);
}
echo "\r\n".' end rmdir = '.$file_name;
RecurciveDeleteChildFiles($file_name);
//array_walk($files, 'RMdir');
return;
//unlink(substr($file_name, 0, -1));
}
Этот более правильный
Но вопрос остался: есть попроще код удаления дочерних всех каталогов и файлов?
Спустя 1 час, 34 минуты, 50 секунд (9.02.2009 - 14:47) LoneCat написал(а):
Я-бы воспользовался SPL и написал что-то вроде этого:
PHP |
function RecursiveDelete(RecursiveDirectoryIterator $oDirectory) { |
Спустя 4 часа, 7 минут, 21 секунда (9.02.2009 - 18:54) Sylex написал(а):
LoneCat
у тебя все сайты на SPL?
Зачем писать свое, когда уже все написано:)
Мощные итераторы
типа так?)
у тебя все сайты на SPL?

Зачем писать свое, когда уже все написано:)
Мощные итераторы

Спустя 1 час, 30 минут, 45 секунд (9.02.2009 - 20:25) LoneCat написал(а):
Цитата (Sylex @ 9.02.2009 - 19:54) |
LoneCat у тебя все сайты на SPL? ![]() Зачем писать свое, когда уже все написано:) Мощные итераторы ![]() |
Ну как сказать, я большой фанат ООП методологии, заметь, в недавнем топике я искал строку в файлах засчет этого-же итератора, а тут я удаляю файлы засчет него-же, тоесть итератор тут - решение-то правильное, и не будь он встроен в SPL - его по уму нужно было-бы реализовать... но так уж вышло (с прискорбием сообщаю


_____________