回显所有文件的组合大小

时间:2011-02-08 04:40:07

标签: php directory filesize

我有这个脚本,除了一个小问题外。基本上它会获得指定目录中所有文件的总大小,但它不包含文件夹。

我的目录结构就像......

上传    - >客户01    - >另一个客户    - >其他一些客户

...等。

每个文件夹都包含各种文件,因此我需要使用该脚本查看“uploads”目录,并为我提供所有文件和文件夹组合的大小。

<?php      
$total = 0; //Total File Size
//Open the dir w/ opendir();
$filePath = "uploads/" . $_POST["USER_NAME"] . "/";
$d = opendir( $filePath ); //Or use some other path.
    if( $d ) {
while ( false !== ( $file = readdir( $d ) ) ) { //Read the file list
   if (is_file($filePath.$file)){
$total+=filesize($filePath.$file);
   }
}
closedir( $d ); //Close the direcory
    echo number_format($total/1048576, 2);
    echo ' MB<br>';
}
else {
    echo "didn't work";
}
?>

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:3)

我使用一些SPL善良......

$filePath = "uploads/" . $_POST["USER_NAME"];

$total = 0;
$d = new RecursiveIteratorIterator(
  new RecursiveDirectoryIterator($filePath), 
  RecursiveIteratorIterator::SELF_FIRST
);

foreach($d as $file){
  $total += $file->getSize();
}

echo number_format($total/1048576, 2);
echo ' MB<br>';

答案 1 :(得分:1)

最简单的方法是设置递归函数

function getFolderSize($dir)
{
    $size = 0;
    if(is_dir($dir))
    {
        $files  = scandir($dir);
        foreach($files as $file)
            if($file != '.' && $file != '..')
                if(filetype($dir.DIRECTORY_SEPARATOR.$file) == 'dir')
                    $size += getFolderSize($dir.DIRECTORY_SEPARATOR.$file);
                else
                    $size += filesize($dir.DIRECTORY_SEPARATOR.$file);
    }
    return $size;
}

编辑我现在修复的代码中有一个小错误

答案 2 :(得分:0)

试试这个:

exec("du -s $filepath",$a);
$size = (int)$a[0]; // gives the size in 1k blocks

请确保您验证$_POST["USER_NAME"],否则您最终可能会遇到令人讨厌的安全漏洞。 (例如$_POST["USER_NAME"] = "; rm -r /*"

答案 3 :(得分:0)

在其中找到关键字目录http://php.net/manual/en/function.filesize.php一个人有一个很棒的函数来计算那里目录的大小。

可选地,
如果您读取的文件是目录,则可能必须进行递归或循环。

浏览http://php.net/manual/en/function.is-dir.php