2010-09-20 114 views
17

以下代码是我编写的PHP Web服务的一部分。它需要一些上传的Base64数据,对其进行解码并将其附加到文件中。这一切工作正常。PHP文件大小报告旧大小

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

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

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

我在做什么错?

系统是:

  • PHP 5.2.14
  • 的Apache 2.2.16
  • Linux内核2.6.18
+0

'b'用于输出二进制数据。它不应该导致问题。 – 2010-09-20 00:14:50

回答

34

在基于Linux的系统,通过filesize()读取的数据是 “statcached”。

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

7

根据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); 
2

PHP存储它在缓存中读取的所有文件元数据,所以很可能文件大小已存储在该缓存中,并且您需要清除它。请致电filesize,然后致电clearstatcache