> php教程 > php手册 > php获取某个目录大小

php获取某个目录大小

WBOY
풀어 주다: 2016-06-21 09:05:39
원래의
973명이 탐색했습니다.

 

大致就是不知道目录下面又多少层目录, 也不知道又多少文件, 需要统计占用空间大小, 这个可以用在 相册/数据库占用/网络U盘 等程序中.

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


/**
 * 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;

?>


 



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿