rho*_*son 26 php directory recursion
我正在使用PHP来移动图像子文件夹的内容
GalleryName /图片/
到另一个文件夹.移动后,我需要删除GalleryName目录及其中的所有其他内容.
我知道rmdir()除非目录为空,否则无效.我花了一段时间尝试构建一个递归函数scandir()从顶部开始,然后unlink()如果它是一个文件,scandir()如果它是一个目录,那么rmdir()每个空目录就像我去的那样.
到目前为止,它并没有完全正确,我开始思考 - 这不是一个PHP应该能够做的非常简单的功能吗?删除目录?
那么有什么我想念的吗?或者至少有一个人们用于此行动的经过验证的功能?
任何帮助,将不胜感激.
PS我在这里比在php.net网站上的评论更信任你们 - 那里有数百种功能但是我很想知道你们这里是否有人推荐其他人.
bar*_*hin 88
这个问题怎么样?
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirPath, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $path) {
$path->isDir() && !$path->isLink() ? rmdir($path->getPathname()) : unlink($path->getPathname());
}
rmdir($dirPath);
Run Code Online (Sandbox Code Playgroud)
rho*_*son 14
This is the recursive function I've created/modifed and that finally seems to be working. Hopefully there isn't anything too dangerous in it.
function destroy_dir($dir) {
if (!is_dir($dir) || is_link($dir)) return unlink($dir);
foreach (scandir($dir) as $file) {
if ($file == '.' || $file == '..') continue;
if (!destroy_dir($dir . DIRECTORY_SEPARATOR . $file)) {
chmod($dir . DIRECTORY_SEPARATOR . $file, 0777);
if (!destroy_dir($dir . DIRECTORY_SEPARATOR . $file)) return false;
};
}
return rmdir($dir);
}
Run Code Online (Sandbox Code Playgroud)