这是我的递归文件和文件夹删除功能。
function rmdirRecursively($dir) {
global $exc;
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir),
RecursiveIteratorIterator::CHILD_FIRST
);
$excludeDirsNames = array();
$excludeFileNames = $exc["files"];
foreach ($it as $entry) {
if ($entry->isDir()) {
if (!in_array($entry->getBasename(), $excludeDirsNames)) {
try {
rmdir($entry->getPathname());
} catch (Exception $ex) {
// dir not empty
}
}
} elseif (!in_array($entry->getFileName(), $excludeFileNames)) {
unlink($entry->getPathname());
}
}
}
我通过发送必须以递归方式删除的父目录名来触发此函数(包含所有内容)
问题是,我正在
[07-Oct-2012 04:31:51] PHP警告:rmdir(./ somefolder)[function.rmdir]:第69行的目录不为空`RecursiveIteratorIterator :: CHILD_FIRST`
我错过了什么?
答案 0 :(得分:1)
试试这个
$excludeDirsNames = array('.', '..');
否则,在删除所有内容之前,您将尝试删除当前目录和父目录。
答案 1 :(得分:0)
首先列出DIR的文件并删除它们,然后您就可以删除DIR
答案 2 :(得分:0)
试试这段代码:
function DelDir($dir)
{
$d = dir($dir);
while (false !== ($entry = $d->read()))
{
if (($entry != '.') && ($entry != '..'))
{
if (is_file($dir . '/' . $entry))
unlink($dir . '/' . $entry);
else
DelDir($dir . '/' . $entry);
}
}
$d->close();
rmdir($dir);
}
DelDir('./test');