php获取某个目录大小的代码


Posted in PHP onSeptember 10, 2008

大致程序思想就是使用递规来计算目录占用空间多少, 然后再把这个占用空间的值写进文本文件里, 那么只要访问这个txt文件就知道占用了多少空间, 不用频繁获取而读磁盘, 节省资源. 每次用户如果上传的文件或者删除了文件, 那么又重新进行统计. 当然, 也可以把统计结果保存到数据库里.

function countDirSize($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; 
}

把字节转换为正常的K啊M啊之类的函数:
function get_real_size($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"; 
} 
}

用法很简单:
$size_zip=countDirSize("../zip/"); 
$size_zip=get_real_size($size_zip);

就这么简单了,呵呵。
<? 
/** 
* File: fetch user directory use size 
* Author: heiyeluren <heiyeluren_AT_gmail_com> 
* Create: 2005-9-19 16:20 
* Modifed: 2005-9-19 16:41 
*/ /*** 基本函数 ***/ 
//计算目录大小 
function countDirSize(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 saveDirSize(userDir) 
{ 
userDirSize = countDirSize(userDir); 
if (!fp = fopen(userDir."/dir_size.txt", "w+")) { 
die("Open file failed"); 
} else { 
fwrite(fp, dirSize); 
} 
} 
//获取用户目录的大小 
function getDirSize(userDir) 
{ 
user = addslashes(userDir); 
sizeFile = userDir."/dir_size.txt"; 
if (!fp = fopen(sizeFile, "r") { 
return 0; 
} else { 
dirSize = fread(fp, filesize(sizeFile)); 
} 
return dirSize; 
} 
/*** 调用实例 ***/ 
user = "heiyeluren"; 
userPath = "./user/".user; 
//如果用户执行了删除或者上传文件的操作就重新获取目录大小 
if (action == "upload" || action == "delete") { 
saveDirSize(userPath); 
} 
userDirSize = getDirSize(userPath)/1024; 
echo "用户: ".user; 
echo "占用空间: ".userDirSize; 
?>
PHP 相关文章推荐
PHP n个不重复的随机数生成代码
Jun 23 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
PHP、Java des加密解密实例
Apr 27 PHP
php里array_work用法实例分析
Jul 13 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
基于PHP制作验证码
Oct 12 PHP
php递归列出所有文件和目录的代码
Sep 10 #PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 #PHP
php面向对象的方法重载两种版本比较
Sep 08 #PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 #PHP
php chr() ord()中文截取乱码问题解决方法
Sep 08 #PHP
wiki-shan写的php在线加密的解密程序
Sep 07 #PHP
php单件模式结合命令链模式使用说明
Sep 07 #PHP
You might like
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
Python装饰器decorator用法实例
2014/11/10 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python实现银行管理系统
2019/10/25 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
党的生日活动方案
2014/08/15 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
小学副班长竞选稿
2015/11/21 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers