php对文件夹进行相关操作(遍历、计算大小)

这篇文章主要介绍了php对文件夹进行相关操作,包括遍历并打印指定目录下所有文件和计算文件大小去空白,以及去重复值等,感兴趣的小伙伴们可以参考一下。

为大家分享的第一个操作内容: 遍历并打印指定目录下所有文件

  1. <?php
  2. //功能:遍历并打印指定目录下所有文件
  3. function scan_dir($dir_name,$dir_flag=1) {
  4. static $FILE_COUNT=1; //记录文件数目 初值为1 目录名称不记
  5. $FILE_COUNT--; //每调用一次scan_dir()函数自减1
  6. @$dir_handle=opendir($dir_name); //抑制错误信息显示 便于自定义错误显示
  7. if(!$dir_handle)
  8. die("目录打开错误!");
  9. while(false!==($filename=readdir($dir_handle))) //文件名为‘0'时,readdir返回 FALSE,判断返回值是否不全等
  10. {
  11. $flag=$dir_flag; //古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false
  12. if($filename!='.'&&$filename!='..')
  13. {
  14. $FILE_COUNT++; //不记录当前路径和上一级路径
  15. while($flag>0&&--$flag) //负数仍为真
  16. echo '&nbsp';
  17. if(is_dir($dir_name.$filename)) //判断 是否为一个目录
  18. {
  19. echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>";
  20. scan_dir($dir_name.$filename.'/',$dir_flag+1); //$dir_flag标志目录树层次
  21. }
  22. else
  23. {
  24. echo "<a href=".$dir_name.$filename.">".$filename."</a><br>";
  25. }
  26. }
  27. }
  28. closedir($dir_handle); //关闭目录句柄
  29. echo "文件总数:".$FILE_COUNT.'<br>';
  30. }
  31. scan_dir('D:/AppServ/www/mytest/shopping/payment/');

总结:

1,关于路径 目录的路径末尾都加上 '/' 以便后面与文件名字符串连接 形成新的 路径字符串

2,目录遍历 这是一个关于树的问题

3,is_dir()函数第一个参数必须是一个能够识别的PATH否则会因目录不存在而返回一个false容易误解

得出 “这不是一个目录”的错误结论 形成逻辑上的错误

4,注意当前路径'.'和上一级路径'..'的剔除 否则 在递归环节造成死循环 直至内存耗尽出错。

5,dir_flag这个变量是记录树的深度 以便于目录分级分层输出

不足

1,输出排版不完善

2,逻辑与表示层混乱 不分明 大忌!

3,面向过程

  1. #####单目录#####
  2. // 列出目录内容 $dir 不要加 '/'
  3. function list_files($dir)
  4. {
  5. if(is_dir($dir))
  6. {
  7. if($handle = opendir($dir))
  8. {
  9. while(($file = readdir($handle)) !== false)
  10. {
  11. if($file != "." && $file != ".." && $file != "Thumbs.db")
  12. {
  13. echo '<a href="'.$dir.'/'.$file.'">'.$file.'</a><br>'."\n";
  14. }
  15. }
  16. closedir($handle);
  17. }
  18. }
  19. }
  20. list_files('D:/AppServ/www/mytest/shopping/payment');

PHP 对文件进行的第二个操作内容:获得文件夹大小 计算文件

  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('D:/AppServ/www/mytest/'));
  51. // get byte
  52. function dirsize($dir)
  53. {
  54. $handle=opendir($dir);
  55. $size = 0;
  56. while ( $file=readdir($handle) )
  57. {
  58. if ( ( $file == "." ) || ( $file == ".." ) ) continue;
  59. if ( is_dir("$dir/$file") )
  60. $size += dirsize("$dir/$file");
  61. else
  62. $size += filesize("$dir/$file");
  63. }
  64. closedir($handle);
  65. return $size;
  66. }
  67. $big=dirsize(dirname($_SERVER['SCRIPT_FILENAME'])."/");
  68. echo '('.$big.' bytes)';

以上就是关于php对文件夹的进行的基本操作,希望对大家的学习有所帮助。