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 相关文章推荐
第十一节 重载 [11]
Oct 09 PHP
解决中英文字符串长度问题函数
Jan 16 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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中养成7个面向对象的好习惯
2010/07/17 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
解决Python安装cryptography报错问题
2020/09/03 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
IBatis持久层技术
2016/07/18 面试题
导游词之贵州百里杜鹃
2019/10/29 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
业余无线电通联Q语
2022/02/18 无线电
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
python数字图像处理实现图像的形变与缩放
2022/06/28 Python