PHP DirectoryIterator :: getSize - 磁盘上的实际大小和大小如何?

时间:2014-06-12 13:20:19

标签: php filesystems

我在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分区类型的磁盘上实际大小和大小也不同吗?

1 个答案:

答案 0 :(得分:0)

文件的实际大小与“磁盘大小”之间始终存在差异。磁盘被分成固定大小的块或簇。文件占用一个或多个群集,群集只能是一个文件的一部分,因此磁盘大小始终是群集的倍数。所有文件系统都以这种方式工作。

我不熟悉那个特定的迭代器,但是PHP提供了对标准POSIX stat()函数的访问,它返回了你想要的关于文件的所有信息,包括它的实际大小,分配的块数,块大小底层文件系统,访问时间等。

http://www.php.net/manual/en/function.stat.php

只需传递一个文件名,它就会返回一个关联的数据数组。您感兴趣的条目是实际大小的size条目,或磁盘大小的blksize×blocks

另一种方法是将文件(fopen()),fseek()打开到文件末尾,然后ftell()打开文件中的位置。