当我运行此代码时:
<?php
$handle = fopen('/tmp/lolwut', 'w') or die("Cannot open File");
fwrite($handle, "1234567890");
fclose($handle);
print_r(filesize('/tmp/lolwut'));
?>
我得到结果10
,这是文件中正确的字符数。
但是,由于文件系统块比这大得多,我希望文件大小“向上舍入”到更像512字节甚至1KB。为什么不呢?
答案 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
。