我在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()
到您在文件中的位置。