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

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-25 10:54:56 浏览: 评论:0 

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

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

  1. <?php  
  2. //功能:遍历并打印指定目录下所有文件  
  3.    
  4. function scan_dir($dir_name,$dir_flag=1) {  
  5.   static $FILE_COUNT=1;        //记录文件数目 初值为1 目录名称不记  
  6.   $FILE_COUNT--;            //每调用一次scan_dir()函数自减1  
  7.   @$dir_handle=opendir($dir_name);   //抑制错误信息显示 便于自定义错误显示  
  8.   if(!$dir_handle)  
  9.   die("目录打开错误!");  
  10.   while(false!==($filename=readdir($dir_handle))) //文件名为‘0'时,readdir返回 FALSE,判断返回值是否不全等  
  11.   {                    
  12.    
  13.     $flag=$dir_flag;         //古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false  
  14.     if($filename!='.'&&$filename!='..')  
  15.     {  
  16.       $FILE_COUNT++;          //不记录当前路径和上一级路径  
  17.       while($flag>0&&--$flag)     //负数仍为真  
  18.         echo '&nbsp';  
  19.       if(is_dir($dir_name.$filename)) //判断 是否为一个目录  
  20.       {  
  21.         echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>";  
  22.         scan_dir($dir_name.$filename.'/',$dir_flag+1);   //$dir_flag标志目录树层次  
  23.       }  
  24.       else  
  25.       {  
  26.         echo "<a href=".$dir_name.$filename.">".$filename."</a><br>";  
  27.       }  
  28.     }  
  29.   }  
  30.   closedir($dir_handle);         //关闭目录句柄  
  31.   echo "文件总数:".$FILE_COUNT.'<br>';  
  32. }  
  33.    
  34. 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.    
  21. 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. //单位自动转换函数  
  24. function getRealSize($size)  
  25. {  
  26.   $kb = 1024;     //Kilobyte  
  27.   $mb = 1024 * $kb;  //Megabyte  
  28.   $gb = 1024 * $mb;  //Gigabyte  
  29.   $tb = 1024 * $gb;  //Terabyte  
  30.        
  31.   if($size < $kb)  
  32.   {  
  33.     return $size." B";  
  34.   }  
  35.   else if($size < $mb)  
  36.   {  
  37.     return round($size/$kb,2)." KB";  
  38.   }  
  39.   else if($size < $gb)  
  40.   {  
  41.     return round($size/$mb,2)." MB";  
  42.   }  
  43.   else if($size < $tb)  
  44.   {  
  45.     return round($size/$gb,2)." GB";  
  46.   }  
  47.   else 
  48.   {  
  49.     return round($size/$tb,2)." TB";  
  50.   }  
  51. }  
  52.    
  53. echo getRealSize(getDirSize('D:/AppServ/www/mytest/'));  
  54.    
  55.    
  56.    
  57. // get byte  
  58. function dirsize($dir)  
  59. {  
  60.   $handle=opendir($dir);  
  61.   $size = 0;  
  62.   while ( $file=readdir($handle) )  
  63.   {  
  64.   if ( ( $file == "." ) || ( $file == ".." ) ) continue;  
  65.   if ( is_dir("$dir/$file") )  
  66.   $size += dirsize("$dir/$file");  
  67.   else 
  68.   $size += filesize("$dir/$file");  
  69.   }  
  70.   closedir($handle);  
  71.   return $size;  
  72. }  
  73.    
  74. $big=dirsize(dirname($_SERVER['SCRIPT_FILENAME'])."/");  
  75. echo '('.$big.' bytes)'

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

Tags: php文件夹遍历

分享到: