获取文件夹大小并且显示为易于读取的文件单位

在获取文件夹中的包含文件时使用了递归的方法,依次取得下级文件和文件夹的大小,然后将返回的大小格式化为易于读取的单位。

 

<? php  //  说明: 获取文件夹大小并且显示为易于读取的文件单位  //  整理: http://www.CodeBit.cn    // 获取文件夹大小 function dir_size($dir) {     if (!preg_match('#/$#', $dir)) {         $dir .= '/';     }     $totalsize = 0;      // 调用文件列表     foreach (get_file_list($dir) as $name) {         $totalsize += (@is_dir($dir.$name) ? dir_size("$dir$name/") :             (int)@filesize($dir.$name));     }     return $totalsize; }   // 获取文件列表 function get_file_list($path) {     $f = $d = array();      // 获取所有文件     foreach (get_all_files($path) as $name) {         if (@is_dir($path.$name)) {             $d[] = $name;         } else if (@is_file($path.$name)) {             $f[] = $name;         }     }     natcasesort($d);     natcasesort($f);     return array_merge($d, $f); }   // 获取所有文件 function get_all_files($path) {     $list = array();     if (($hndl = @opendir($path)) === false) {         return $list;     }     while (($file=readdir($hndl)) !== false) {         if ($file != '.' && $file != '..') {             $list[] = $file;         }     }     closedir($hndl);     return $list; }   // 转换单位 function setupSize($fileSize) {     $size = sprintf("%u", $fileSize);     if($size == 0) {         return("0 Bytes");     }     $sizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");     return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i]; }   // 目录 $path = './test_dir/';   // 显示文件列表 print_r(get_file_list($path)).'<br>';   // 显示文件大小 echo dir_size($path).'<br>';   // 显示转换过单位的大小 echo setupSize(dir_size($path));  ?> 

 

代码包含四个函数,dir_size() 是获取文件夹大小的函数,函数中使用了递归的方法,此函数需要调用 get_file_list() ,获取文件夹中的所有文件列表,如果文件列表中有文件夹存在,就调用 get_all_files()  获取文件夹下的文件列表。由此取得目标文件夹的大小。

setupSize() 是将传人的大小转换为易于读取的文件单位,可以转换成 Bytes, KB, MB, GB, TB, PB, EB, ZB, YB 等单位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值