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


PHP DirectoryIterator::getSize - how real size and size on disk?

我在windows XAMPP服务器上使用这样的代码。

    $di = new RecursiveDirectoryIterator($dir);
    $files = new RecursiveIteratorIterator(
        $di,
        RecursiveIteratorIterator::LEAVES_ONLY
    );
    $totalsize = 0;
    foreach($files as $a => $b) {
        $totalsize += $b->getSize();
    }

Size i get与Size On Disk == 62MB相同(相差0.1MB)但是,windows显示的实际大小是42MB

有办法得到"真实尺寸"吗?另外,linux分区类型上的实际大小和磁盘大小也不同吗?

文件的实际大小和它的"磁盘大小"之间总是有差异的。磁盘被分割成固定大小的块或簇。一个文件占用一个或多个集群,而一个集群只能是一个文件的一部分,因此磁盘大小将始终是多个集群。所有文件系统都是这样工作的。

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

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

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

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