Следующий код является частью веб-сервиса PHP, который я написал. Он требует некоторых загруженных данных Base64, декодирует их и добавляет в файл. Все это прекрасно работает.
Проблема в том, что когда я читаю размер файла после операции добавления, я получаю размер файла перед операцией добавления.
$fileOut = fopen($filepath.$filename, "ab") fwrite($fileOut, base64_decode($data)); fflush($fileOut); fclose($fileOut); $newSize = filesize($filepath.$filename); // gives old file size
Что я делаю не так?
Система:
В системах на базе 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
.