Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1572141
  • 博文数量: 50
  • 博客积分: 9971
  • 博客等级: 中将
  • 技术积分: 2615
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-03 16:03
文章分类

全部博文(50)

文章存档

2011年(2)

2010年(2)

2009年(41)

2008年(5)

我的朋友

分类:

2009-04-29 17:13:35

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

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


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

setupSize() 是将传人的大小转换为易于读取的文件单位,可以转换成 Bytes, KB, MB, GB, TB, PB, EB, ZB, YB 等单位。
阅读(887) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~