Подтвердить что ты не робот

Отформатированный старый формат 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
4b9b3361

Ответ 1

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

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

Ответ 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);

Ответ 3

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