大致程序思想就是使用递规来计算目录占用空间多少,然后再把这个占用空间的值写进文本文件里,那么只要访问这个txt文件就知道占用了多少空间,不用频繁获取而读磁盘,节省资源. 每次用户如果上传的文件或者删除了文件,那么又重新进行统计. 当然,也可以把统计结果保存到数据库里. <div class="codetitle"><a style="CURSOR: pointer" data="55163" class="copybut" id="copybut55163" onclick="doCopy('code55163')"> 代码如下:<div class="codebody" id="code55163"> 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啊之类的函数: <div class="codetitle"><a style="CURSOR: pointer" data="46877" class="copybut" id="copybut46877" onclick="doCopy('code46877')"> 代码如下:<div class="codebody" id="code46877"> 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"; } } 用法很简单: <div class="codetitle"><a style="CURSOR: pointer" data="24850" class="copybut" id="copybut24850" onclick="doCopy('code24850')"> 代码如下:<div class="codebody" id="code24850"> $size_zip=countDirSize("../zip/"); $size_zip=get_real_size($size_zip); 就这么简单了,呵呵。 <div class="codetitle"><a style="CURSOR: pointer" data="64371" class="copybut" id="copybut64371" onclick="doCopy('code64371')"> 代码如下:<div class="codebody" id="code64371"> <? / File: fetch user directory use size Author: heiyeluren 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; ?>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|