zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

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

functioncountDirSize($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啊之类的函数:
复制代码代码如下:

functionget_real_size($size){

$kb=1024;//Kilobyte
$mb=1024*$kb;//Megabyte
$gb=1024*$mb;//Gigabyte
$tb=1024*$gb;//Terabyte

if($size<$kb){
return$size."B";
}elseif($size<$mb){
returnround($size/$kb,2)."KB";
}elseif($size<$gb){
returnround($size/$mb,2)."MB";
}elseif($size<$tb){
returnround($size/$gb,2)."GB";
}else{
returnround($size/$tb,2)."TB";
}
}

用法很简单:
复制代码代码如下:
$size_zip=countDirSize("../zip/");
$size_zip=get_real_size($size_zip);

就这么简单了,呵呵。

复制代码代码如下:
<?
/**
*File:fetchuserdirectoryusesize
*Author:heiyeluren<heiyeluren_AT_gmail_com>
*Create:2005-9-1916:20
*Modifed:2005-9-1916:41
*/

/***基本函数***/

//计算目录大小
functioncountDirSize(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);
returnsizeResult;
}

//保存用户文件大小
functionsaveDirSize(userDir)
{
userDirSize=countDirSize(userDir);
if(!fp=fopen(userDir."/dir_size.txt","w+")){
die("Openfilefailed");
}else{
fwrite(fp,dirSize);
}
}

//获取用户目录的大小
functiongetDirSize(userDir)
{
user=addslashes(userDir);
sizeFile=userDir."/dir_size.txt";
if(!fp=fopen(sizeFile,"r"){
return0;
}else{
dirSize=fread(fp,filesize(sizeFile));
}
returndirSize;
}
/***调用实例***/
user="heiyeluren";
userPath="./user/".user;

//如果用户执行了删除或者上传文件的操作就重新获取目录大小
if(action=="upload"||action=="delete"){
saveDirSize(userPath);
}

userDirSize=getDirSize(userPath)/1024;
echo"用户:".user;
echo"占用空间:".userDirSize;
?>