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

5年以前  |  阅读数:749 次  |  编程语言:PHP 

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


    <?php 
    //功能:遍历并打印指定目录下所有文件 

    function scan_dir($dir_name,$dir_flag=1) { 
      static $FILE_COUNT=1;        //记录文件数目 初值为1 目录名称不记 
      $FILE_COUNT--;            //每调用一次scan_dir()函数自减1 
      @$dir_handle=opendir($dir_name);   //抑制错误信息显示 便于自定义错误显示 
      if(!$dir_handle) 
      die("目录打开错误!"); 
      while(false!==($filename=readdir($dir_handle))) //文件名为'0'时,readdir返回 FALSE,判断返回值是否不全等 
      {                   

        $flag=$dir_flag;         //古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false 
        if($filename!='.'&&$filename!='..') 
        { 
          $FILE_COUNT++;          //不记录当前路径和上一级路径 
          while($flag>0&&--$flag)     //负数仍为真 
            echo ' '; 
          if(is_dir($dir_name.$filename)) //判断 是否为一个目录 
          { 
            echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>"; 
            scan_dir($dir_name.$filename.'/',$dir_flag+1);   //$dir_flag标志目录树层次 
          } 
          else  
          { 
            echo "<a href=".$dir_name.$filename.">".$filename."</a><br>"; 
          } 
        } 
      } 
      closedir($dir_handle);         //关闭目录句柄 
      echo "文件总数:".$FILE_COUNT.'<br>'; 
    } 

    scan_dir('D:/AppServ/www/mytest/shopping/payment/'); 


    /*总结:
    1,关于路径 目录的路径末尾都加上 '/' 以便后面与文件名字符串连接 形成新的 路径字符串
    2,目录遍历 这是一个关于树的问题
    3,is_dir()函数第一个参数必须是一个能够识别的PATH否则会因目录不存在而返回一个false容易误解
    得出 "这不是一个目录"的错误结论 形成逻辑上的错误
    4,注意当前路径'.'和上一级路径'..'的剔除 否则 在递归环节造成死循环 直至内存耗尽出错。
    5,dir_flag这个变量是记录树的深度 以便于目录分级分层输出                */
    /*不足
    1,输出排版不完善
    2,逻辑与表示层混乱 不分明 大忌!
    3,面向过程
    */

#####单目录#####


    // 列出目录内容 $dir 不要加 '/' 
    function list_files($dir) 
    { 
      if(is_dir($dir)) 
      { 
        if($handle = opendir($dir)) 
        { 
          while(($file = readdir($handle)) !== false) 
          { 
            if($file != "." && $file != ".." && $file != "Thumbs.db") 
            { 
              echo '<a href="'.$dir.'/'.$file.'">'.$file.'</a><br>'."\n"; 
            } 
          } 
          closedir($handle); 
        } 
      } 
    } 

    list_files('D:/AppServ/www/mytest/shopping/payment'); 

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


    <?php  
    function getDirSize($dir) 
    { 
      $handle = opendir($dir); 
      while (false!==($FolderOrFile = readdir($handle))) 
      { 
        if($FolderOrFile != "." && $FolderOrFile != "..") 
        { 
          if(is_dir("$dir/$FolderOrFile")) 
          { 
            $sizeResult += getDirSize("$dir/$FolderOrFile"); 
          } 
          else 
          { 
            $sizeResult += filesize("$dir/$FolderOrFile"); 
          } 
        }   
      }  
      closedir($handle); 
      return $sizeResult; 
    } 

    //单位自动转换函数 
    function getRealSize($size) 
    { 
      $kb = 1024;     //Kilobyte 
      $mb = 1024 * $kb;  //Megabyte 
      $gb = 1024 * $mb;  //Gigabyte 
      $tb = 1024 * $gb;  //Terabyte 

      if($size < $kb) 
      { 
        return $size." B"; 
      } 
      else if($size < $mb) 
      { 
        return round($size/$kb,2)." KB"; 
      } 
      else if($size < $gb) 
      { 
        return round($size/$mb,2)." MB"; 
      } 
      else if($size < $tb) 
      { 
        return round($size/$gb,2)." GB"; 
      } 
      else 
      { 
        return round($size/$tb,2)." TB"; 
      } 
    } 

    echo getRealSize(getDirSize('D:/AppServ/www/mytest/')); 



    // get byte 
    function dirsize($dir) 
    { 
      $handle=opendir($dir); 
      $size = 0; 
      while ( $file=readdir($handle) ) 
      { 
      if ( ( $file == "." ) || ( $file == ".." ) ) continue; 
      if ( is_dir("$dir/$file") ) 
      $size += dirsize("$dir/$file"); 
      else 
      $size += filesize("$dir/$file"); 
      } 
      closedir($handle); 
      return $size; 
    } 

    $big=dirsize(dirname($_SERVER['SCRIPT_FILENAME'])."/"); 
    echo '('.$big.' bytes)'; 

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8