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 相关文章推荐
PHPMailer邮件发送的实现代码
May 04 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
php判断用户是否手机访问代码
Jun 08 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
tp5.1 框架join方法用法实例分析
May 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环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
拖动一个HTML元素
2006/12/22 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
Python计算一个文件里字数的方法
2015/06/15 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python求离散序列导数的示例
2019/07/10 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
《和田的维吾尔》教学反思
2014/04/14 职场文书
爱护公物演讲稿
2014/09/09 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android