当前位置:首页 > PHP教程 > php文件操作 > 列表

php如何获取文件夹大小程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-01-05 22:40:12 浏览: 评论:0 

本文章来告诉你php如何获取文件夹大小吧,我们递归列出文件然后再利用filesize来统计文件大小并显示出来,代码如下:

  1. <?php 
  2. //获取文件夹大小  
  3. function dir_size($dir) {  
  4.     if (!preg_match('#/$#'$dir)) {  
  5.         $dir .= '/';  
  6.     }  
  7.     $totalsize = 0;  
  8.     //调用文件列表  
  9.     foreach (get_file_list($diras $name) {  
  10.         $totalsize += (@is_dir($dir.$name) ? dir_size("$dir$name/") :  
  11.             (int)@filesize($dir.$name));  
  12.     }  
  13.     return $totalsize;  
  14. }  
  15.    
  16. //获取文件列表  
  17. function get_file_list($path) {  
  18.     $f = $d = array();  
  19.     //获取所有文件  
  20.     foreach (get_all_files($pathas $name) {  
  21.         if (@is_dir($path.$name)) {  
  22.             $d[] = $name;  
  23.         } else if (@is_file($path.$name)) {  
  24.             $f[] = $name;  
  25.         }  
  26.     }  
  27.     natcasesort($d);  
  28.     natcasesort($f);  
  29.     return array_merge($d$f);  
  30. }  
  31.    
  32. //获取所有文件  
  33. function get_all_files($path) {  
  34.     $list = array();  
  35.     if (($hndl = @opendir($path)) === false) {  
  36.         return $list;  
  37.     }  
  38.     while (($file=readdir($hndl)) !== false) {  
  39.         if ($file != '.' && $file != '..') {  
  40.             $list[] = $file;  
  41.         }  
  42.     }  
  43.     closedir($hndl);  
  44.     return $list;  
  45. }  
  46.    
  47. //转换单位  
  48. function setupSize($fileSize) {  
  49.     $size = sprintf("%u"$fileSize);  
  50.     if($size == 0) {  
  51.         return("0 Bytes");  
  52.     }  
  53.     $sizename = array(" Bytes"" KB"" MB"" GB"" TB"" PB"" EB"" ZB"" YB");  
  54.     return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i]; 
  55. }  
  56.    
  57. //目录  
  58. $path = './test_dir/';  
  59.    
  60. //显示文件列表  
  61. print_r(get_file_list($path)).'<br>';  
  62.    
  63. //显示文件大小  
  64. echo dir_size($path).'<br>';  
  65.    
  66. //显示转换过单位的大小  
  67. echo setupSize(dir_size($path));  
  68. ?> 

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

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

例2,代码如下:

  1. <?php 
  2. function getDirSize($dir
  3.     {  
  4.         $handle = opendir($dir); 
  5.         while (false!==($FolderOrFile = readdir($handle))) 
  6.         {  
  7.             if($FolderOrFile != "." && $FolderOrFile != "..")  
  8.             {  
  9.                 if(is_dir("$dir/$FolderOrFile")) 
  10.                 {  
  11.                     $sizeResult += getDirSize("$dir/$FolderOrFile");  
  12.                 } 
  13.                 else 
  14.                 {  
  15.                     $sizeResult += filesize("$dir/$FolderOrFile");  
  16.                 } 
  17.             }     
  18.         } 
  19.         closedir($handle); 
  20.         return $sizeResult
  21.     } 
  22.     // 单位自动转换函数 
  23.     function getRealSize($size
  24.     {  
  25.         $kb = 1024;         // Kilobyte 
  26.         $mb = 1024 * $kb;   // Megabyte 
  27.         $gb = 1024 * $mb;   // Gigabyte 
  28.         $tb = 1024 * $gb;   // Terabyte 
  29.          
  30.         if($size < $kb
  31.         {  
  32.             return $size." B"
  33.         } 
  34.         else if($size < $mb
  35.         {  
  36.             return round($size/$kb,2)." KB"
  37.         } 
  38.         else if($size < $gb
  39.         {  
  40.             return round($size/$mb,2)." MB"
  41.         } 
  42.         else if($size < $tb
  43.         {  
  44.             return round($size/$gb,2)." GB"
  45.         } 
  46.         else 
  47.         {  
  48.             return round($size/$tb,2)." TB"
  49.         } 
  50.     } 
  51.     echo getRealSize(getDirSize(dirname($_SERVER[SCRIPT_FILENAME])./include/)); 
  52.  
  53. ?> 
  54. ######################################################### 
  55. //function dirsize($dir)  
  56. //{ 
  57. //   $handle=opendir($dir);  
  58. //   $size = 0; 
  59. //   while ( $file=readdir($handle) )  
  60. //   { 
  61. //       if ( ( $file == "." ) || ( $file == ".." ) ) continue; 
  62. //       if ( is_dir("$dir/$file") ) 
  63. //           $size += dirsize("$dir/$file"); 
  64. //       else 
  65. //           $size += filesize("$dir/$file"); 
  66. //   } 
  67. //   closedir($handle); 
  68. //   return $size; 
  69. //} 
  70. //$big=dirsize(dirname($_SERVER[SCRIPT_FILENAME])."/"); 
  71. //echo $big; 

得到的结果是小数点后两位的,$big*1024 得到单位为KB

Tags: php获取 文件夹大小

分享到: