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默认安装产生系统漏洞
Oct 09 PHP
详细介绍PHP应用提速面面观
Oct 09 PHP
PHP调用三种数据库的方法(1)
Oct 09 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
php实现无限级分类实现代码(递归方法)
Jan 01 PHP
PHP中PDO的错误处理
Sep 04 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
PHP图片加水印实现方法
May 06 PHP
php中加密解密DES类的简单使用方法示例
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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
javascript的函数
2007/01/31 Javascript
img标签中onerror用法
2009/08/13 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
javascript数据类型详解
2017/02/07 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Django发送html邮件的方法
2015/05/26 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
解决uWSGI的编码问题详解
2017/03/24 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
使用numba对Python运算加速的方法
2018/10/15 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
行政监察建议书
2014/05/19 职场文书
员工薪酬激励方案
2014/06/13 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
开除通知书范本
2015/04/25 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL