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

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

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. if($size < $kb)
  30. {
  31. return $size." B";
  32. }
  33. else if($size < $mb)
  34. {
  35. return round($size/$kb,2)." KB";
  36. }
  37. else if($size < $gb)
  38. {
  39. return round($size/$mb,2)." MB";
  40. }
  41. else if($size < $tb)
  42. {
  43. return round($size/$gb,2)." GB";
  44. }
  45. else
  46. {
  47. return round($size/$tb,2)." TB";
  48. }
  49. }
  50. echo getRealSize(getDirSize(dirname($_SERVER[SCRIPT_FILENAME])./include/));
  51. ?>
  52. #########################################################
  53. //function dirsize($dir)
  54. //{
  55. // $handle=opendir($dir);
  56. // $size = 0;
  57. // while ( $file=readdir($handle) )
  58. // {
  59. // if ( ( $file == "." ) || ( $file == ".." ) ) continue;
  60. // if ( is_dir("$dir/$file") )
  61. // $size += dirsize("$dir/$file");
  62. // else
  63. // $size += filesize("$dir/$file");
  64. // }
  65. // closedir($handle);
  66. // return $size;
  67. //}
  68. //$big=dirsize(dirname($_SERVER[SCRIPT_FILENAME])."/");
  69. //echo $big;

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