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面向对象分析设计的61条军规小结
Jul 17 PHP
php入门学习知识点二 PHP简单的分页过程与原理
Jul 14 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
bootstrap table小案例
2016/10/21 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
深入Python函数编程的一些特性
2015/04/13 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
幼儿园安全责任书
2014/04/14 职场文书
企业文化标语大全
2014/06/10 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
理想国读书笔记
2015/06/25 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python