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 相关文章推荐
php debug 安装技巧
Apr 30 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
php curl模拟post提交数据示例
Dec 31 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
Centos7安装swoole扩展操作示例
Mar 26 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类的反射用法实例
2014/11/03 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Viking比利时:购买办公用品
2019/10/30 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
十月份红领巾广播稿
2014/01/22 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
介绍信怎么写
2015/01/30 职场文书
送达通知书
2015/04/25 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript