php如何获取文件夹大小程序代码
本文章来告诉你php如何获取文件夹大小吧,我们递归列出文件然后再利用filesize来统计文件大小并显示出来,代码如下:
- <?php
 - //获取文件夹大小
 - 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 等单位。
例2,代码如下:
- <?php
 - function getDirSize($dir)
 - {
 - $handle = opendir($dir);
 - while (false!==($FolderOrFile = readdir($handle)))
 - {
 - if($FolderOrFile != "." && $FolderOrFile != "..")
 - {
 - if(is_dir("$dir/$FolderOrFile"))
 - {
 - $sizeResult += getDirSize("$dir/$FolderOrFile");
 - }
 - else
 - {
 - $sizeResult += filesize("$dir/$FolderOrFile");
 - }
 - }
 - }
 - closedir($handle);
 - return $sizeResult;
 - }
 - // 单位自动转换函数
 - function getRealSize($size)
 - {
 - $kb = 1024; // Kilobyte
 - $mb = 1024 * $kb; // Megabyte
 - $gb = 1024 * $mb; // Gigabyte
 - $tb = 1024 * $gb; // Terabyte
 - if($size < $kb)
 - {
 - return $size." B";
 - }
 - else if($size < $mb)
 - {
 - return round($size/$kb,2)." KB";
 - }
 - else if($size < $gb)
 - {
 - return round($size/$mb,2)." MB";
 - }
 - else if($size < $tb)
 - {
 - return round($size/$gb,2)." GB";
 - }
 - else
 - {
 - return round($size/$tb,2)." TB";
 - }
 - }
 - echo getRealSize(getDirSize(dirname($_SERVER[SCRIPT_FILENAME])./include/));
 - ?>
 - #########################################################
 - //function dirsize($dir)
 - //{
 - // $handle=opendir($dir);
 - // $size = 0;
 - // while ( $file=readdir($handle) )
 - // {
 - // if ( ( $file == "." ) || ( $file == ".." ) ) continue;
 - // if ( is_dir("$dir/$file") )
 - // $size += dirsize("$dir/$file");
 - // else
 - // $size += filesize("$dir/$file");
 - // }
 - // closedir($handle);
 - // return $size;
 - //}
 - //$big=dirsize(dirname($_SERVER[SCRIPT_FILENAME])."/");
 - //echo $big;
 
得到的结果是小数点后两位的,$big*1024 得到单位为KB