统计一个目录大小,因为不知道目录中子目录的深度,所以for循环很难实现,但是用递归调用很容易实现,只要统计出一个目录中所有文件的大小,那么每一次调用就可以了,随便建了个目录,建立一些文件,方法代码如下:
1 function dirsize($dirname){ 2 static $sum=0; //静态变量,防止每次递归置零 3 $handle=opendir($dirname); 4 while(($item=readdir($handle))!==false){ 5 if($item!='.'&&$item!='..'){ 6 if(is_file($dirname.'/'.$item)){ 7 $sum+=filesize($dirname.'/'.$item); 8 } 9 if(is_dir($dirname.'/'.$item)){ 10 //递归操作 11 $func=__FUNCTION__; 12 $func($dirname.'/'.$item); 13 //dirsize($dirname.'/'.$item); 14 } 15 } 16 } 17 closedir($handle); 18 return $sum; 19 } 20 $filename='ssh'; 21 $arr=dirsize($filename); 22 echo ($arr/1024).'KB';
这样就可以统计目录大小了,定义保存目录大小变量的时候要定义静态的变量或者全局变量,整个程序运行过程中一直存在,防止每次递归置零
注意目录'.'和'..'的处理,如果使用Linux那就再熟悉不过了
重点部分就几句代码,判断是文件还是目录,是文件进行累加计算,否则递归调用。