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


Posted in PHP onNovember 04, 2015

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

<?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对文件夹的进行的基本操作,希望对大家的学习有所帮助。

PHP 相关文章推荐
初探PHP5
Oct 09 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
XHProf报告字段含义的解析
May 17 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
通过实例解析PHP数据类型转换方法
Jul 11 PHP
PHP实现HTML页面静态化的方法
Nov 04 #PHP
php实现网站留言板功能
Nov 04 #PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 #PHP
两种php去除二维数组的重复项方法
Nov 04 #PHP
PHP扩展开发教程(总结)
Nov 04 #PHP
PHP实现GIF图片验证码
Nov 04 #PHP
php实现分页显示
Nov 03 #PHP
You might like
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
yii上传文件或图片实例
2014/04/01 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
致跳远、跳高运动员广播稿
2014/01/09 职场文书
会计学专业自荐信
2014/06/25 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
商铺租房协议书范本
2014/12/04 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
独生子女证明范本
2015/06/19 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
利用Python实时获取steam特惠游戏数据
2022/06/25 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS