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 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP源代码数组统计count分析
Aug 02 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP中关于php.ini参数优化详解
Feb 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利用cookie实现访问次数统计代码
2011/05/19 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
PHP类型约束用法示例
2016/09/28 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
python如何生成网页验证码
2018/07/28 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
函授毕业自我鉴定
2013/12/19 职场文书
司仪主持词两篇
2014/03/22 职场文书
工程质量承诺书
2014/03/27 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
师范大学生求职信
2014/06/13 职场文书
欢迎标语大全
2014/06/21 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书