我正在尝试创建删除webhosting上除文件和文件夹数组之外的所有文件和目录的函数
function cleanUp($exdirs, $exfiles){
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('.'),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach($it as $entry) {
if ($entry->isDir() && !in_array($entry->getBasename(), $exdirs)) {
rmdir($entry->getPathname());
}
else {
if (!in_array($entry->getFileName(), $exfiles)) {
unlink($entry->getPathname());
}
else {
$exdirs[] = dirname($entry->getFileName());
}
}
}
}
并像这样调用此函数
$excludeDirsNames = array('cgi-bin');
$excludeFileNames = array('.htaccess', 'ws.zip', 'update.php');
cleanUp($excludeDirsNames , $excludeFileNames);
现在的问题是,它会删除但多次收到错误消息:Directory not empty on line rmdir($entry->getPathname());
。如何解决这个问题?
答案 0 :(得分:1)
您允许排除文件和目录,但如果目录包含以前排除的其他文件或目录,则不进行测试。
if (substr($oneExcludedFileOrDirectory, 0, strlen($currentDir) === $currentDir) {
echo "Directory not empty";
}
只是一个简单的前缀比较:“dir”是其中一个排除路径的前缀吗?只适用于绝对路径(以及其他一些小事),但它应该解释,是什么问题。
答案 1 :(得分:0)
以下是导致其失效的两个原因:
1)在您的子文件夹中有一个是您要排除的文件。没有删除,因此无法“rm”文件夹。
2)在“unlink”和“rmdir”-Funktion调用“clearstatcache();”之后。我想这会解决你的问题。文件已删除,但信息仍可在缓存中使用。