使用PHP删除空子文件夹

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用PHP删除空子文件夹脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个 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);
}

脚本宝典总结

以上是脚本宝典为你收集整理的使用PHP删除空子文件夹全部内容,希望文章能够帮你解决使用PHP删除空子文件夹所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。