Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP DirectoryIterator::getSize-磁盘上的实际大小是多少?_Php_Filesystems - Fatal编程技术网

PHP DirectoryIterator::getSize-磁盘上的实际大小是多少?

PHP DirectoryIterator::getSize-磁盘上的实际大小是多少?,php,filesystems,Php,Filesystems,我在WindowsXAMPP服务器上使用这样的代码 $di = new RecursiveDirectoryIterator($dir); $files = new RecursiveIteratorIterator( $di, RecursiveIteratorIterator::LEAVES_ONLY ); $totalsize = 0; foreach($files as $a => $b) {

我在WindowsXAMPP服务器上使用这样的代码

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

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

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

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


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

我意识到了这一点。每个文件被分割成与块大小相等的部分。若最后一部分较小,则块的其余部分不能由其他文件使用。我知道文件系统是如何工作的。感谢您提供有关POSIX stat的信息。不过,我对DirectoryIterator本身很感兴趣。在Linux机器上,脚本会返回什么呢?在Linux上,getSize的值与stat数组中size条目的值相同。