PHP实现计算一个文件夹的大小

1. PHP如何计算文件夹大小

在 PHP 中,我们可以通过程序来计算一个文件夹的大小,经典的实现方式是使用递归,它可以遍历文件夹中的所有文件和子文件夹,计算它们的大小并将其累加得到整个文件夹的大小。

1.1. 使用递归遍历文件夹

为了实现对文件夹遍历的递归,我们可以使用 PHP 的scandir()函数返回文件夹中的所有文件和文件夹,然后通过循环逐个读取这些文件和文件夹。如果这个文件是目录,我们就可以继续递归进入这个目录,否则就通过filesize()函数获取它的大小。

function folder_size($dir){

$size = 0;

$files = scandir($dir);

foreach($files as $file){

if($file == "." || $file == "..") continue;

$path = $dir . DIRECTORY_SEPARATOR . $file;

if(is_dir($path)){

$size += folder_size($path);

}else{

$size += filesize($path);

}

}

return $size;

}

1.2. 格式化文件大小输出

文件大小计算出来后,我们一般需要将其格式化为易读的形式,常见的格式有 B、KB、MB、GB 等等。我们可以通过数学运算将字节转换为其他单位,具体代码实现如下:

function format_size($bytes, $decimals = 2){

$size = array('B','KB','MB','GB','TB','PB','EB','ZB','YB');

$factor = floor((strlen($bytes) - 1) / 3);

return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$size[$factor];

}

使用示例:

$dir = './test';

$size = folder_size($dir);

echo "Folder size: " . format_size($size);

如果此时文件夹的大小为 1035947 字节,则输出结果为:

Folder size: 1011.62KB

2. 参考文献

- [PHP 获取目录大小 (递归)](https://www.cnblogs.com/strayfish/p/9251495.html)

- [PHP格式化字节为易读的单位](https://www.cnblogs.com/sephp/p/5018898.html)

后端开发标签