【BUG】获取目录大小方法中的静态变量

【BUG】获取目录大小方法中的静态变量

老师的代码中将$sum定义为静态变量,这样一来函数每次调用后$sum会累加,后面计算的目录大小都是累加大小。我认为应该将$sum定义为普通变量,直接累加递归的返回值。如下:

        $sum = 0;
        while (($item = @readdir($handle)) !== false) {
            if ($item != '.' && $item != '..') {
                $pathName = $path.DIRECTORY_SEPARATOR.$item;
                $func = __FUNCTION__;
                $sum += is_file($pathName) ? filesize($pathName) : $func($pathName);
            }
        }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imooc_澈 2017-08-14 00:30:33

您好,在函数中将$sum定义为静态变量,累加的是这一层中的文件大小,如果遇到文件夹,会再次调用这个函数,再次调用的时候在内部静态变量累加的是下一层文件的大小,层层返回之后再与外层的相加,最后才能得到总的文件大小。如果解决了您的疑问,请采纳,祝学习愉快哦~

  • 提问者 江新丰 #1
    我的意思是: //下面的get_dir_size()使用了静态变量 $path = 'directory/b'; var_dump(get_dir_size($path)); // int(7756) 为b的大小 $path = 'directory/lib'; var_dump(get_dir_size($path)); // int(38116) 为b和lib的总和
    2017-08-14 07:07:27
  • guly 回复 提问者 江新丰 #2
    你好,如果b在lib文件夹下这样计算也是可以的,如果解决您的问题请采纳祝学习愉快!
    2017-08-15 22:37:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师