【问题标题】:Symfony 3 - Images not updating instantlySymfony 3 - 图像不会立即更新
【发布时间】: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


【解决方案1】:

这绝对是 bxN5 所说的浏览器缓存。但我不同意更改标题。如果您选择通过修改缓存标头来管理此问题,这将强制您永久删除这些图像上的缓存,或者让 Web 浏览器询问您的服务器这些图像是否已被修改(下载的字节数减少,但每次调用时都会增加一个请求)。

我认为更好的方法是通过更改图像名称或添加查询字符串来更改图像 url。在这两种情况下,您都需要图像的版本标识符。您可以使用图像的修改日期(时间戳)。

【讨论】:

  • 是的,我将使用随机名称,这是最简单的选择。
猜你喜欢
  • 2018-11-08
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多