Ответ 1
В системах на базе Linux данные, полученные с помощью filesize()
, "statcached".
Попробуйте вызвать clearstatcache();
перед вызовом filesize.
Следующий код является частью веб-сервиса 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
.