我有这个脚本,除了一个小问题外。基本上它会获得指定目录中所有文件的总大小,但它不包含文件夹。
我的目录结构就像......
上传 - >客户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";
}
?>
任何帮助都将不胜感激。
答案 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一个人有一个很棒的函数来计算那里目录的大小。
可选地,
如果您读取的文件是目录,则可能必须进行递归或循环。