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 相关文章推荐
session 的生命周期是多长
Oct 09 PHP
PHP调用三种数据库的方法(3)
Oct 09 PHP
php&amp;java(三)
Oct 09 PHP
php 表单数据的获取代码
Mar 10 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
组合算法的PHP解答方法
Feb 04 PHP
mac下安装nginx和php
Nov 04 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 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
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
python实现折半查找和归并排序算法
2017/04/14 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python async with和async for的使用
2019/06/20 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
python修改文件内容的3种方法详解
2019/11/15 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
小学捐书活动总结
2014/07/05 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
检举信的写法
2019/04/10 职场文书
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL