Php filesize():给出不正确的结果

Php filesize():给出不正确的结果,php,file,io,size,Php,File,Io,Size,我正在测试一个用于修改文件的工具,其中一个相当重要的功能是告诉文件大小,尤其是当文件仍然打开时 $file = tempnam('/tmp', 'test_'); file_put_contents($file, 'hello world'); echo 'Initial Read: ' . file_get_contents($file).PHP_EOL; echo 'Initial Size: ' . filesize($file).PHP_EOL; $fp = fopen($file

我正在测试一个用于修改文件的工具,其中一个相当重要的功能是告诉文件大小,尤其是当文件仍然打开时

$file = tempnam('/tmp', 'test_');
file_put_contents($file, 'hello world');

echo 'Initial Read: ' . file_get_contents($file).PHP_EOL;

echo 'Initial Size: ' . filesize($file).PHP_EOL;

$fp = fopen($file, 'a');
fwrite($fp, ' then bye');

echo 'Final Read:   ' . file_get_contents($file).PHP_EOL;

fclose($fp);
echo 'Final Size:   ' . filesize($file).PHP_EOL;
这个简单的脚本给出了一些奇怪的结果:

Initial Read: hello world
Initial Size: 11
Final Read:   hello world then bye
Final Size:   11
我认为最终的大小应该是文件仍然打开的结果,这就是为什么我添加了
fclose($fp),但是这没有什么区别。无论哪种方式,我都需要能够在文件仍然打开时确定大小

$file = tempnam('/tmp', 'test_');
file_put_contents($file, 'hello world');

echo 'Initial Read: ' . file_get_contents($file).PHP_EOL;

echo 'Initial Size: ' . filesize($file).PHP_EOL;

$fp = fopen($file, 'a');
fwrite($fp, ' then bye');

echo 'Final Read:   ' . file_get_contents($file).PHP_EOL;

fclose($fp);
echo 'Final Size:   ' . filesize($file).PHP_EOL;
最终尺寸应为20。有人知道这可能的原因以及如何解决吗?

如前所述,在再次调用
filesize()
之前,需要调用
clearstatcache()

$file = tempnam('/tmp', 'test_');
file_put_contents($file, 'hello world');

echo 'Initial Read: ' . file_get_contents($file).PHP_EOL;

echo 'Initial Size: ' . filesize($file).PHP_EOL;

$fp = fopen($file, 'a');
fwrite($fp, ' then bye');

echo 'Final Read:   ' . file_get_contents($file).PHP_EOL;

fclose($fp);
clearstatcache();

echo 'Final Size:   ' . filesize($file).PHP_EOL;