我在Windows XAMPP服务器上使用这样的代码。
$di = new RecursiveDirectoryIterator($dir);
$files = new RecursiveIteratorIterator(
$di,
RecursiveIteratorIterator::LEAVES_ONLY
);
$totalsize = 0;
foreach($files as $a => $b) {
$totalsize += $b->getSize();
}
我得到的尺寸与磁盘尺寸相同(0.1MB差异)== 62MB 但是,windows显示实际大小为42MB
有没有办法获得"实际尺寸"?另外,在Linux分区类型的磁盘上实际大小和大小也不同吗?
答案 0 :(得分:0)
文件的实际大小与“磁盘大小”之间始终存在差异。磁盘被分成固定大小的块或簇。文件占用一个或多个群集,群集只能是一个文件的一部分,因此磁盘大小始终是群集的倍数。所有文件系统都以这种方式工作。
我不熟悉那个特定的迭代器,但是PHP提供了对标准POSIX stat()函数的访问,它返回了你想要的关于文件的所有信息,包括它的实际大小,分配的块数,块大小底层文件系统,访问时间等。
http://www.php.net/manual/en/function.stat.php
只需传递一个文件名,它就会返回一个关联的数据数组。您感兴趣的条目是实际大小的size
条目,或磁盘大小的blksize
×blocks
。
另一种方法是将文件(fopen()
),fseek()
打开到文件末尾,然后ftell()
打开文件中的位置。