【发布时间】:2017-07-22 09:26:28
【问题描述】:
目前正在开发一个 Symfony 3 应用程序。我创建了一个服务,让用户上传图片,然后选择裁剪部分,最后保存具有特定高度和宽度的头像。头像保存在/web/img/uploads/avatar/ 文件夹中。我正在使用用户 ID 来命名文件。因此 id 为 13 的用户将其头像保存在/web/img/uploads/avatar/13.png。
我的问题是,当用户更新他的头像时,文件夹中的文件被正确替换,但在实际网站上显示的头像在一段时间内仍然是旧的。
在开发环境中,新头像替换旧头像需要几分钟时间。即使我转到头像 url (localhost/app_dev.php/img/uploads/avatar/xxx.png),在最终被新头像取代之前,我仍然会看到旧头像一段时间。但是,文件系统中的头像立即被替换,正如预期的那样。
我认为这可能来自缓存。我尝试在 google 上搜索解决方案,但我发现的都与 LiipImagineBundle 及其缓存管理器有关,但我没有使用这个包......
在确定其名称之后,以及在实际裁剪和保存图像之前,我尝试删除旧头像(如果它存在)。如下。
if(file_exists($dst)) {
unlink($dst);
}
但它不起作用。完全没有。
有什么想法吗?
【问题讨论】:
-
只是浏览器缓存
-
我真的无能为力,除了告诉我的用户“嘿,你改变了你的头像,太好了,现在等一会儿,直到你的浏览器最终决定更新它的缓存,你”会看到你全新的照片。” ?或者只是随机化图像的名称我猜,这样 url 就会改变,因为每次用户上传一个新头像时它都会得到一个新的。
-
尝试发送您的客户端标头(缓存控制:无缓存,必须重新验证)
-
对上传的图片使用随机名称,仅此而已。
标签: php image file caching symfony