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

本文介绍了一种使用PHP递归获取文件夹大小的方法,并通过格式化输出易于理解的单位,如Bytes, KB, MB等。

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

 

<?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 等单位。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值