Написать функцию, которая будет удалять каталог и всё содержимое в нём, т.е. подкаталоги и файлы.
Осуществить рекурсивный вызов этой функции в подкаталогах.
При удалении каталогов и файлов, на экран выводить какие каталоги и файлы были удалены.
Путь до удаляемого каталога задать с помощью константы в скрипте.
Придумано 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 написал(а):
Спасибо, минус ошибка с неверной идентификацией папок/файлов!
Остался главный вопрос: почему удаляет не там, где я его прошу. Или почему я не понимаю что я прошу его удалить не там где хочу попросить
Остался главный вопрос: почему удаляет не там, где я его прошу. Или почему я не понимаю что я прошу его удалить не там где хочу попросить