前端之家收集整理的这篇文章主要介绍了
使用PHP删除空子文件夹,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
403_0@
我正在开发一个
PHP函数,它将以递归方式
删除所有不包含从给定
绝对路径开始的
文件的子
文件夹.
这是迄今为止开发的代码:
function RemoveEmptySubFolders($starting_from_path) {
// Returns true if the folder contains no files
function IsEmptyFolder($folder) {
return (count(array_diff(glob($folder.DIRECTORY_SEPARATOR."*"),Array(".",".."))) == 0);
}
// Cycles thorugh the subfolders of $from_path and
// returns true if at least one empty folder has been removed
function DoRemoveEmptyFolders($from_path) {
if(IsEmptyFolder($from_path)) {
rmdir($from_path);
return true;
}
else {
$Dirs = glob($from_path.DIRECTORY_SEPARATOR."*",GLOB_ONLYDIR);
$ret = false;
foreach($Dirs as $path) {
$res = DoRemoveEmptyFolders($path);
$ret = $ret ? $ret : $res;
}
return $ret;
}
}
while (DoRemoveEmptyFolders($starting_from_path)) {}
}
根据我的测试,这个功能可行,但我很高兴看到任何有关更好性能代码的想法.
如果空
文件夹中的空
文件夹中有空
文件夹,则需要在所有
文件夹中循环三次.所有这些,因为你先测试
文件夹,然后测试它的孩子.相反,你应该在测试父
文件是否为空之前进入子
文件夹,这样一次传递就足够了.
function RemoveEmptySubFolders($path)
{
$empty=true;
foreach (glob($path.DIRECTORY_SEPARATOR."*") as $file)
{
if (is_dir($file))
{
if (!RemoveEmptySubFolders($file)) $empty=false;
}
else
{
$empty=false;
}
}
if ($empty) rmdir($path);
return $empty;
}
顺便说一句,glob不会返回.和..条目.
更短的版本:
function RemoveEmptySubFolders($path)
{
$empty=true;
foreach (glob($path.DIRECTORY_SEPARATOR."*") as $file)
{
$empty &= is_dir($file) && RemoveEmptySubFolders($file);
}
return $empty && rmdir($path);
}