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)