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之第一天
Oct 09 PHP
php 三维饼图的实现代码
Sep 28 PHP
destoon整合UCenter图文教程
Jun 21 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 PHP
Symfony核心类概述
Mar 17 PHP
php连接oracle数据库的核心步骤
May 26 PHP
PHP二维数组去重算法
Dec 17 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP使用QR Code生成二维码实例
Jul 07 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漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
json数据与字符串的相互转化示例
2013/09/18 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
Python argv用法详解
2016/01/08 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
岗位职责风险点
2014/03/12 职场文书
经济管理自荐书
2014/06/09 职场文书
关于幸福的感言
2015/08/03 职场文书
安全教育培训心得体会
2016/01/15 职场文书
一篇文章学会Vue中间件管道
2021/06/20 Vue.js