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

  大致程序思想就是使用递规来计算目录占用空间多少, 然后再把这个占用空间的值写进文本文件里, 那么只要访问这个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;

  ?>