[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: [Проблема]Не корректное удаление файла.
ungvar
Добрый день. Есть такая задача:

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

Придумано 2 варианта решения.

Первый вариант (самописный):

$namedir = "C:\test";

function DeleteDir ($namedir)
{
$dir = scandir($namedir);
foreach ($dir as $key => $element)
{
if (is_file($element))
{
echo "$element (file) <br>" ;
unlink ($element);
}
elseif (is_dir($element))
{
echo "$element (dir) <br>";
}
else
{
echo "$element (undefined) <br>";
}
}
rmdir ($namedir);
}

DeleteDir ($namedir);


Результатом выполнения имеем:

. (dir)
.. (dir)
action.php (undefined)
commodity.php (undefined)
content.html (undefined)
favicon.ico (undefined)
index.php (file)
text.txt (undefined)

Warning: rmdir(C:\test) [function.rmdir]: Directory not empty in Z:\home\localhost\www\index.php on line 24


Т.е. не правильно распознает файлы и удаляет все не из указанной папки, а из папки, где лежит сам скрипт.

Второй вариант (найденный в учебнике и немного докрученый):


function recurseTree($oIterator)
{
while ($oIterator->valid())
{
if ($oIterator->isDir() && !$oIterator->isDot())
{
echo $oIterator . " (Dir " . $oIterator->key() . ")<br>";
if ($oIterator->hasChildren())
{
recurseTree($oIterator->getChildren());
}
}
else if ($oIterator->isFile())
{
echo $oIterator . " (File " . $oIterator->key() . ")<br>";
system ("del $oIterator");
}
$oIterator->next();
}
}
recurseTree(new recursiveDirectoryIterator('c:\test'));


Результатом имеем:

action.php (File c:\test\action.php)
commodity.php (File c:\test\commodity.php)
content.html (File c:\test\content.html)
favicon.ico (File c:\test\favicon.ico)
index.php (File c:\test\index.php)
text.txt (File c:\test\text.txt)

Определено все правильно, только и в данном примере удаление идет в той же папке, где лежит скрипт.

Вопрос: Подскажите, пожалуйста, где и чего я не понимаю?




Спустя 7 минут, 18 секунд (1.12.2011 - 14:45) ungvar написал(а):
UPD: только что обнаружил, что первый вариант по подпапкам не ходит, по-этому нужный функционал не выполняет, но это можно докрутить. Все равно остается вопрос: почему он удаляет все из папки со скриптом, а не из указанной папки?

Спустя 4 минуты, 48 секунд (1.12.2011 - 14:50) TranceIT написал(а):
Попробуйте так

elseif ($element != '.' && $element != '..' && is_dir($element))
{
echo "$element (dir) <br>";
}

Спустя 7 минут, 19 секунд (1.12.2011 - 14:57) ungvar написал(а):
Спасибо, минус ошибка с неверной идентификацией папок/файлов!

Остался главный вопрос: почему удаляет не там, где я его прошу. Или почему я не понимаю что я прошу его удалить не там где хочу попросить smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.