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 15 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
php中http_build_query 的一个问题
Mar 25 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
Jun 21 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 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中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php如何连接sql server
2015/10/16 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
javascript History对象原理解析
2020/02/17 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
python爬取抖音视频的实例分析
2021/01/19 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
护理个人求职信范文
2014/01/08 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
美术国培研修感言
2014/02/12 职场文书
取保候审保证书
2014/04/30 职场文书
教师工作失职检讨书
2014/09/18 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
如何写好开幕词?
2019/06/24 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python
世界十大狙击步枪排行榜
2022/03/20 杂记