大致程序思想就是使用递规来计算目录占用空间多少, 然后再把这个占用空间的值写进文本文件里, 那么只要访问这个txt文件就知道占用了多少空间, 不用频繁获取而读磁盘, 节省资源. 每次用户如果上传的文件或者删除了文件, 那么又重新进行统计. 当然, 也可以把统计结果保存到数据库里.
<BR>function countDirSize($dir) <BR>{ <BR>$handle = opendir($dir); <BR>while (false!==($FolderOrFile = readdir($handle))) <BR>{ <BR>if($FolderOrFile != "." && $FolderOrFile != "..") <BR>{ <BR>if(is_dir("$dir/$FolderOrFile")) { <BR>$sizeResult += getDirSize("$dir/$FolderOrFile"); <BR>} else { <BR>$sizeResult += filesize(<div style="color:transparent">!本文来源gaodai.ma#com搞#代!码(网</div><em>搞gaodaima代码</em>"$dir/$FolderOrFile"); <BR>} <BR>} <BR>} <BR>closedir($handle); <BR>return $sizeResult; <BR>} <BR>
把字节转换为正常的K啊M啊之类的函数:
<BR>function get_real_size($size) { <br><br>$kb = 1024; // Kilobyte <BR>$mb = 1024 * $kb; // Megabyte <BR>$gb = 1024 * $mb; // Gigabyte <BR>$tb = 1024 * $gb; // Terabyte <br><br>if($size < $kb) { <BR>return $size." B"; <BR>}else if($size < $mb) { <BR>return round($size/$kb,2)." KB"; <BR>}else if($size < $gb) { <BR>return round($size/$mb,2)." MB"; <BR>}else if($size < $tb) { <BR>return round($size/$gb,2)." GB"; <BR>}else { <BR>return round($size/$tb,2)." TB"; <BR>} <BR>} <BR>
用法很简单:
<BR>$size_zip=countDirSize("../zip/"); <BR>$size_zip=get_real_size($size_zip); <BR>
就这么简单了,呵呵。
<? <BR>/** <BR>* File: fetch user directory use size <BR>* Author: heiyeluren <BR>* Create: 2005-9-19 16:20 <BR>* Modifed: 2005-9-19 16:41 <BR>*/ <br><br>/*** 基本函数 ***/ <br><br>//计算目录大小 <BR>function countDirSize(dir) <BR>{ <BR>handle = opendir(dir); <BR>while (false!==(FolderOrFile = readdir(handle))) <BR>{ <BR>if(FolderOrFile != "." && FolderOrFile != "..") <BR>{ <BR>if(is_dir("dir/FolderOrFile")) { <BR>sizeResult += getDirSize("dir/FolderOrFile"); <BR>} else { <BR>sizeResult += filesize("dir/FolderOrFile"); <BR>} <BR>} <BR>} <BR>closedir(handle); <BR>return sizeResult; <BR>} <br><br>//保存用户文件大小 <BR>function saveDirSize(userDir) <BR>{ <BR>userDirSize = countDirSize(userDir); <BR>if (!fp = fopen(userDir."/dir_size.txt", "w+")) { <BR>die("Open file failed"); <BR>} else { <BR>fwrite(fp, dirSize); <BR>} <BR>} <br><br>//获取用户目录的大小 <BR>function getDirSize(userDir) <BR>{ <BR>user = addslashes(userDir); <BR>sizeFile = userDir."/dir_size.txt"; <BR>if (!fp = fopen(sizeFile, "r") { <BR>return 0; <BR>} else { <BR>dirSize = fread(fp, filesize(sizeFile)); <BR>} <BR>return dirSize; <BR>} <BR>/*** 调用实例 ***/ <BR>user = "heiyeluren"; <BR>userPath = "./user/".user; <br><br>//如果用户执行了删除或者上传文件的操作就重新获取目录大小 <BR>if (action == "upload" || action == "delete") { <BR>saveDirSize(userPath); <BR>} <br><br>userDirSize = getDirSize(userPath)/1024; <BR>echo "用户: ".user; <BR>echo "占用空间: ".userDirSize; <BR>?> <BR>