我正在开发一个PHP函数,它将扫描给定的文件夹并返回文件夹中所有文件的总大小。我的问题是,即使它适用于存储在该文件夹根目录中的文件,它也不适用于任何子文件夹中的文件。我的代码是:
function get_total_size($system)
{
$size = 0;
$path = scandir($system);
unset($path[0], $path[1]);
foreach($path as $file)
{
if(is_dir($file))
{
get_total_size("{$system}/{$file}");
}
else
{
$size = $size + filesize("{$system}/{$file}");
}
}
$size = $size / 1024;
return number_format($size, 2, ".", ",");
}
我没有设置数组的第0个和第1个元素,因为这些是点和双点来上一个目录。任何帮助将不胜感激
答案 0 :(得分:1)
您忘了计算子文件夹的大小。您必须将其添加到$size
变量。
function get_total_size($system)
{
$size = 0;
$path = scandir($system);
unset($path[0], $path[1]);
foreach($path as $file)
{
if(is_dir($file))
{
$size += get_total_size("{$system}/{$file}"); // <--- HERE
}
else
{
$size = $size + filesize("{$system}/{$file}");
}
}
return $size;
}
但是这可能会产生问题,因为您正在使用number_format
功能。我不会这样做,并在收到get_total_size
函数的结果后添加格式。
答案 1 :(得分:1)
你可以使用递归目录迭代器。看看下面的解决方案:
<?php
$total_size = 0;
$di = new RecursiveDirectoryIterator('/directory/path');
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
if($file->isFile()) {
echo $filename . ' - ' . $file->getSize() . ' bytes <br/>';
$total_size += $file->getSize();
}
}
echo $total_size; //in bytes
?>
答案 2 :(得分:1)
您可以尝试此过程。当您检查此文件is_dir时,您还必须计算文件大小。当你检查is_dir时,你必须用root目录连接它,否则它会显示错误。
function get_total_size($system)
{
$size = 0;
$path = scandir($system);
unset($path[0], $path[1]);
foreach($path as $file)
{
if(is_dir($system.'/'.$file))
{
$size+=get_total_size("{$system}/{$file}");
}
else
{
$size = $size + filesize("{$system}/{$file}");
}
}
$size = $size / 1024;
return number_format($size, 2, ".", ",");
}
我认为它会正常工作
快乐编码:)
答案 3 :(得分:0)
SELECT
T.Name AS TableName,
S.Row_count AS RecordsCount
FROM
sys.dm_db_partition_stats S
INNER JOIN sys.tables T ON T.object_id = S.object_id
Where
Object_Name(S.Object_Id) IN ('Employees','Country')
系列课程对您有用。
recursiveIterator