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引用传值实例详解学习
Nov 06 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
PHP面向对象精要总结
Nov 07 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php使用mysqli向数据库添加数据的方法
Mar 20 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php封装的mysqli类完整实例
Oct 18 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
PHP filesize函数用法浅析
Feb 15 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警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
基于python实现KNN分类算法
2020/04/23 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
Python中无限循环需要什么条件
2020/05/27 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
公司市场部岗位职责
2013/12/02 职场文书
《学会合作》教学反思
2014/04/12 职场文书
奖学金个人总结
2015/03/04 职场文书
大学生入党群众意见书
2015/06/02 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python