2010-09-20 3 views
17

Следующий код является частью веб-службы PHP, которую я написал. Он требует некоторых загруженных данных 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' используется для вывода двоичных данных. Это не должно вызывать проблемы. –

ответ

34

В системах на базе Linux, данные, получаемые filesize() является "statcached".

Попробуйте позвонить clearstatcache(); перед вызовом filesize.

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 хранит все метаданные файла, которые он читает в кеше, поэтому вполне вероятно, что размер файла уже сохранен в этом кеше, и вам нужно его очистить. См. clearstatcache и позвоните ему, прежде чем позвонить filesize.