当我运行这段代码时:
<?php
$handle = fopen('/tmp/lolwut', 'w') or die("Cannot open File");
fwrite($handle, "1234567890");
fclose($handle);
print_r(filesize('/tmp/lolwut'));
?>
我得到结果10
,这是文件中正确的字符数。
然而,由于文件系统块比这个大得多,我预计文件大小会“四舍五入”为 512 字节甚至 1KB。为什么不是呢?
不要将“文件大小”与“磁盘上的文件大小”混淆;PHP's filesize功能 http://www.php.net/manual/en/function.filesize.php给你的是前者,而不是后者。
尽管没有明确记录,filesize
基本上是在以下方面实施的stat
,以及在 Linux 上stat区分文件大小和“磁盘上的文件大小” http://linux.die.net/man/2/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 上似乎也是如此 http://msdn.microsoft.com/en-us/library/14h5k7ff%28v=vs.80%29.aspx.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)