为什么我从`filesize`得到如此准确的结果?

时间:2013-05-08 10:19:18

标签: php

当我运行此代码时:

<?php
$handle = fopen('/tmp/lolwut', 'w') or die("Cannot open File");    
fwrite($handle, "1234567890");
fclose($handle);

print_r(filesize('/tmp/lolwut'));
?>

我得到结果10,这是文件中正确的字符数。

但是,由于文件系统块比这大得多,我希望文件大小“向上舍入”到更像512字节甚至1KB。为什么不呢?

1 个答案:

答案 0 :(得分:8)

不要将“文件大小”混淆为“磁盘上的文件大小”; PHP's filesize function给你前者,而不是后者。

虽然没有明确记录,filesize基本上是根据stat和Linux stat makes a distinction between filesize and "file size on disk"实现的:

  

所有这些系统调用都返回stat结构,其中包含以下字段:

struct stat {
    // [...]
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    // [...]
};

您期望的值为st_blocks * st_blksize,但无论如何都可以使用“true”文件大小st_size

This appears to be the case on Windows, too。)