2010-09-20 118 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