【问题标题】:filesize() : giving incorrect resultfilesize() : 给出不正确的结果
【发布时间】:2014-09-14 13:11:17
【问题描述】:

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

$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。有谁知道这可能的原因以及如何解决它?

【问题讨论】:

    标签: php file io size


    【解决方案1】:

    正如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;
    

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2017-12-14
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2011-10-27
      • 2011-11-30
      相关资源
      最近更新 更多