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抽象类 介绍
Jun 13 PHP
PHP UTF8中文字符截断函数代码
Sep 11 PHP
PHP无限分类(树形类)
Sep 28 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php无序树实现方法
Jul 28 PHP
PHP程序员的技术成长规划
Mar 25 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 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-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
javascript弹出页面回传值的方法
2015/01/28 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
Python中的推导式使用详解
2015/06/03 Python
python开发之thread线程基础实例入门
2015/11/11 Python
python3爬取数据至mysql的方法
2018/06/26 Python
python标记语句块使用方法总结
2019/08/05 Python
wxPython实现文本框基础组件
2019/11/18 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
软件工程师面试题
2012/06/25 面试题
酒店出纳岗位职责
2013/12/29 职场文书
投标单位介绍信
2014/01/09 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
2015年药店工作总结
2015/04/20 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
军训后的感想
2015/08/07 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
Spring Boot 实现 WebSocket
2022/04/30 Java/Android
Java 多线程协作作业之信号同步
2022/05/11 Java/Android