4

当我运行此代码时:

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

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

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

然而,由于文件系统块比这大得多,我预计文件大小会“向上取整”到 512 字节甚至 1KB。为什么不是?

4

1 回答 1

8

不要将“文件大小”与“磁盘上的文件大小”混淆;PHP 的filesize函数为您提供前者,而不是后者。

虽然没有明确记录,但filesize基本上是根据 实现的stat,并且在 Linux 上stat区分了文件大小和“磁盘上的文件大小”

所有这些系统调用都返回一个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,但无论如何都可以使用“真实”文件大小st_size

在 Windows 上似乎也是如此。)

于 2013-05-08T10:19:17.670 回答