我正在测试一个用于修改文件的工具,在此过程中一个相当重要的功能是告诉文件大小,尤其是当文件仍然打开时。
$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);
的原因,但这没有任何区别。无论哪种方式,我都需要能够在文件仍处于打开状态时确定大小。
最终大小应该是 20。有谁知道这可能的原因以及如何解决它?
最佳答案
作为this comment说明,您需要先调用 clearstatcache()
,然后再调用 filesize()
。
$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;
关于php - 文件大小(): giving incorrect result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25833610/