使用php递归计算目录大小

  统计一个目录大小,因为不知道目录中子目录的深度,所以for循环很难实现,但是用递归调用很容易实现,只要统计出一个目录中所有文件的大小,那么每一次调用就可以了,随便建了个目录,建立一些文件,方法代码如下:

 1 function dirsize($dirname){
 2     static $sum=0;    //静态变量,防止每次递归置零
 3     $handle=opendir($dirname);
 4     while(($item=readdir($handle))!==false){
 5         if($item!=‘.‘&&$item!=‘..‘){
 6             if(is_file($dirname.‘/‘.$item)){
 7                 $sum+=filesize($dirname.‘/‘.$item);
 8             }
 9             if(is_dir($dirname.‘/‘.$item)){
10                 //递归操作
11                 $func=__FUNCTION__;
12                 $func($dirname.‘/‘.$item);
13                 //dirsize($dirname.‘/‘.$item);
14             }
15         }
16     }
17     closedir($handle);
18     return $sum;
19 }
20 $filename=‘ssh‘;
21 $arr=dirsize($filename);
22 echo ($arr/1024).‘KB‘;

这样就可以统计目录大小了,定义保存目录大小变量的时候要定义静态的变量或者全局变量,整个程序运行过程中一直存在,防止每次递归置零

注意目录‘.‘和‘..‘的处理,如果使用Linux那就再熟悉不过了

重点部分就几句代码,判断是文件还是目录,是文件进行累加计算,否则递归调用。

时间: 2024-10-05 06:00:45

使用php递归计算目录大小的相关文章

PHP文件操作 之统计目录大小

<?php //定义一个函数 统计目录大小函数 function dirSize($dirName) { //判断目录是否存在 if (!file_exists($dirName)) { die('目录不存在!'); } //判断是否是目录 if (!is_dir($dirName)) { die('您所遍历的不是目录!'); } //打开目录 $d = opendir($dirName); //判断打开目录是否成功 if (!$d) { die('打开目录失败!'); } //读取目录 whi

二叉树的先序遍历和后序遍历的应用--输出文件和统计目录大小

一,介绍 本文主要二叉树的两种基本的典型应用: 1) 输出某个文件夹下所有文件名称(可以有子文件夹)---用先序遍历实现 2) 统计某个文件夹的大小(该文件夹下所有文件的大小--用后序遍历实现 二,实现分析 对于问题 1),输出文件名称的过程如下: 如果是文件夹,先输出文件夹名,然后再依次输出该文件夹下的所有文件(包括子文件夹),如果有子文件夹,则再进入该子文件夹,输出该子文件夹下的所有文件名.这是一个典型的先序遍历过程. 对于问题2),统计文件夹的大小过程如下: 若要知道某文件夹的大小,必须先

利用zabbix监控某个目录大小

近期,因为JMS的消息堆积导致ApacheMQ频率故障(消息没有被消费掉,导致其数据库达到1.2G,JMS此时直接挂掉),很是郁闷!刚好自 己在研究zabbix.既然zabbix如此强大,那么它可以监控我的这个目录大小吗?在网上找了很久之后,没有结果. 此时,想起了这前导入的其他模版,于是决定修改模版,改着改着又出问题!但是思路已经有了.于是有了本文. 有了需求,可以直接开工了!为了方便记忆,我会写详细的步骤. 需求: 要监控/usr/local/activemq5.5/data/kahadb

PHP遍历目录返回统计目录大小实例

分享一个 PHP遍历目录并返回统计目录大小的方法.代码: <?php $dirname = "test1"; //mkdir($dirname); //遍历一层目录 function listdir($dirname) { $ds = opendir($dirname); while($file = readdir($ds)) { $path = $dirname.'/'.$file; if(is_dir($file)) { echo "DIR:".$file

关于服务器各用户的家目录大小限制方案

关于服务器各用户的家目录大小限制 方法1-把磁盘重新规划.格式分区,再用quota进行磁盘配额限制,再针对每个对应的家目录进行挂载使用. 缺点:由于公司这边的磁盘采用的不是LVM逻辑卷管理,所以不能自由裁剪,这种方法相当于重新分区,一但分区后,大小就固定了,以后就不能更改了!  不建议使用 方法2-使用dd命令,撑大一个文件比如说(500G),然后把原来home下用户家目录如(denghuayi)里面的资料全部剪切到另外一个文件夹,然后再把这个文件挂载到家目录下,再把原来的资料复制回来. 缺点:

linux目录大小显示不实时问题

之前有朋友在群里问到这个问题,为什么ls -l 显示的目录的大小跟预期的不一样. 问题如下 问题: 在data目录下创建5000个文件,这个目录大小变了,然后我删除了这5000个文件,这个目录的大小没有发生变化.为什么? 要解答这个问题我们首先要清楚linux中文件的储存原理,linux中一切皆是文件,从根往下呈现树状结构 再往下延伸,当前目录的属性信息其实是存在其上级目录的block中,比如大小.由下图可知 1. 这是文件的属性信息  这个信息是存储在此目录的上级目录的block里的,叫目录项

Linux 下获取当前路径所有目录大小并排序

日常工作中,会遇到一堆目录,如何查看各目录大小呢,大家都知道du命令 先列出前10条 [email protected] /scripts]#du -sh * | head 120K 2017031510 248K 2017031514 23M 2017031515 664K 2017031516 656K 2017031517 2.0M 2017031518 68K 2017031519 884K 2017031520 580K 2017031521 60K 2017031609 再排序 [e

php 递归求得目录大小

/* * 递归求得目录大小 * @param $dir 目录 */ function dirsize($dir){ $allsize = 0; $handle = opendir($dir); while($file = readdir($handle)){ if($file != '.' && $file != '..'){ $file = $dir . '/' . $file; if(is_dir($file)){ $allsize += dirsize($file); }else{

linux查看文件和目录大小(du命令)

起因 工作中或者日常使用ubuntu时候,经常会遇到查看当前系统容量的情况, 这时候就需要我们使用命令来查询当前目录或者文件的大小了 目录的容量(du) 语法格式 [plain] du  [-ahskm]  文件或者目录名 参数解释 -a : 列出所有的文件与目录容量,因为默认仅统计目录的容量而已 -h  :  以人们较易读的容量格式呈现(G/M/K)显示,自动选择显示的单位大小 -s  :  列出总量而已,而不列出每个个别的目录占用容量 -k : 以KB为单位进行显示 -m :  以MB为单位