I'm trying to create function which removes all file and directories on webhosting excluding given files and folders arrays
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());
}
}
}
}
And calling this function like this
$excludeDirsNames = array('cgi-bin');
$excludeFileNames = array('.htaccess', 'ws.zip', 'update.php');
cleanUp($excludeDirsNames , $excludeFileNames);
Now the problem is, it deletes but getting error message: Directory not empty on line rmdir($entry->getPathname());
several times. How to fix that problem?
You allow to exclude files and directories, but you don't test, if a directory contains other files, or directories, that were excluded before.
if (substr($oneExcludedFileOrDirectory, 0, strlen($currentDir) === $currentDir) {
echo "Directory not empty";
}
Just a simple prefix comparison: Is "dir" is prefix of one of the excluded paths? Only works for absolute paths (and some other minor things), but it should explain, whats the matter.