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 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
使用php计算排列组合的方法
Nov 13 PHP
php使用websocket示例详解
Mar 12 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
PHP操作MySQL事务实例
Nov 05 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
PHP记录和读取JSON格式日志文件
Jul 07 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHP截取发动短信内容的方法
Jul 04 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
PHP个人网站架设连环讲(一)
2006/10/09 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
PHP闭包实例解析
2014/09/08 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Python while 循环使用的简单实例
2016/06/08 Python
python 二维数组90度旋转的方法
2019/01/28 Python
pandas数据处理进阶详解
2019/10/11 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
python palywright库基本使用
2021/01/21 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
党员自我批评与反省材料
2014/02/10 职场文书
《泉水》教学反思
2014/04/11 职场文书
搞笑爱情保证书
2014/04/29 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
布达拉宫的导游词
2015/02/02 职场文书
针对吵架老公保证书
2015/05/08 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL