В настоящее время работает над приложением Symfony 3. Я создал службу, которая позволяет пользователям загружать изображение, затем выбирать раздел кадрирования и, наконец, сохраняет аватар с определенной высотой и шириной. Аватары сохраняются в папке /web/img/uploads/avatar/
. Я использую идентификатор пользователя для имени файла. Таким образом, у пользователя с идентификатором 13 будет сохранен аватар на /web/img/uploads/avatar/13.png
.
Моя проблема заключается в том, что когда пользователь обновляет свой аватар, файл правильно заменяется в папке, но на фактическом веб-сайте отображаемый аватар остается старым. В среде dev это занимает примерно несколько минут, прежде чем новый аватар заменит старый. Даже если я localhost/app_dev.php/img/uploads/avatar/xxx.png
к URL-адресу аватара (localhost/app_dev.php/img/uploads/avatar/xxx.png
), я до сих пор вижу старый аватар, прежде чем он будет заменен новым. Тхо, аватар в файловой системе мгновенно заменяется, как и ожидалось.
Я решил, что это может произойти из кеша. Я попытался найти решения в google, но все, что я нашел, было связано с LiipImagineBundle и его менеджером кэша, но я не использую этот пакет...
Я попытался удалить старый аватар, если он существует после определения его имени, и до того, как он на самом деле прорвался и сохранил изображение. Следующим образом.
if(file_exists($dst)) {
unlink($dst);
}
Но это не сработает. Вообще.
Есть идеи?
Это, безусловно, кеш браузера, как сказано в bxN5. Но я не согласен с изменением заголовков. Если вы решите управлять этим путем изменения заголовков кеша, это заставит вас навсегда удалить кеш на этих изображениях или позволить веб-браузерам спросить ваш сервер, были ли эти изображения изменены (меньше загруженных байтов, но дополнительный запрос при каждом вызове).
Я думаю, что лучший способ - изменить URL-адрес изображения, изменив имя изображения или добавить строку запроса. В обоих случаях вам нужен идентификатор версии для вашего изображения. Вы можете использовать дату изменения изображения (временную метку).