Отформатированный старый формат PHP

Следующий код является частью веб-сервиса PHP, который я написал. Он требует некоторых загруженных данных Base64, декодирует их и добавляет в файл. Все это прекрасно работает.

Проблема в том, что когда я читаю размер файла после операции добавления, я получаю размер файла перед операцией добавления.

$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

Related of "Отформатированный старый формат PHP"

В системах на базе Linux данные, полученные с помощью filesize() , «statcached».

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

Согласно руководству 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); 

PHP хранит все метаданные файлов, которые он читает в кеше, поэтому вполне вероятно, что размер файла уже сохранен в этом кеше, и вам нужно его очистить. См. Clearstatcache и вызовите его перед вызовом filesize .