PHP 文件大小报告旧大小

2022-08-30 15:11:41

以下代码是我编写的 PHP Web 服务的一部分。它获取一些上传的 Base64 数据,对其进行解码,然后将其附加到文件中。这一切都很好。

问题是,当我在追加操作之后读取文件大小时,我得到追加操作之前文件的大小。

$fileOut = fopen($filepath.$filename, "ab")
fwrite($fileOut, base64_decode($data));
fflush($fileOut);
fclose($fileOut);

$newSize = filesize($filepath.$filename);   // gives old file size

我做错了什么?

系统是:

  • 5.2.14 菲律宾比索
  • 阿帕奇 2.2.16
  • Linux 内核 2.6.18

答案 1

在基于Linux的系统上,获取的数据是“statcached”。filesize()

尝试在文件大小调用之前调用 clearstatcache();


答案 2

根据 PHP 手册:

将缓存此函数的结果。有关详细信息,请参阅 clearstatcache()。

http://us2.php.net/manual/en/function.filesize.php

基本上,您必须在文件操作后清除统计信息缓存:

$fileOut = fopen($filepath.$filename, "ab")
fwrite($fileOut, base64_decode($data));
fflush($fileOut);
fclose($fileOut);

clearstatcache();

$newSize = filesize($filepath.$filename);

推荐