if( is_dir($url) )
{
if( $dp = opendir( $url) )
{
while (false !== ($file = readdir($dp))) {
if( $file != "." || $file != ".." )
{
$fileSize += filesize($userFileDir."/".$file);
}
}
}
closedir($dp);
}
{
if( $dp = opendir( $url) )
{
while (false !== ($file = readdir($dp))) {
if( $file != "." || $file != ".." )
{
$fileSize += filesize($userFileDir."/".$file);
}
}
}
closedir($dp);
}
系统调用也没有直接实现的方法, 你用c写成php函数, 给php调用才可以, 不过这样也是很麻烦.
反正你要统计目录, 而且你又无法确定对方目录的子目录又多少, 那么使用递规是不错的方法.
另外, 为了防止频繁读取磁盘, 可以考虑把用户文件大小保存到数据库或者文本文件里.为了描述这个问题, 我下面写了一段代码来描述, 下面是使用文本文件来保存用户的目录大小.<?
/**
* 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;?>