Php 如何在web应用程序中更改时加载新图像

Php 如何在web应用程序中更改时加载新图像,php,deployment,smarty,Php,Deployment,Smarty,如何在web应用程序中推送新图像,以便不获取缓存的图像? 当我有一个新的JS或CSS文件时,这很容易。 因为它们在smarty模板中,我在URL中有一个版本号(比如a.js?v=9) 现在,图像的问题是:- 它们是从CSS文件中引用的,我不能在那里有一个版本变量 那么,怎么做呢?您可以在更改图像文件的同时手动更改CSS文件,在图像url的末尾添加一个“?v=1” 您还可以将服务器配置为通过PHP处理器发送CSS文件,这样您就可以在其中插入一些PHP代码,以便在图像url上设置“?v=8”查询字符

如何在web应用程序中推送新图像,以便不获取缓存的图像? 当我有一个新的JS或CSS文件时,这很容易。 因为它们在smarty模板中,我在URL中有一个版本号(比如a.js?v=9)

现在,图像的问题是:-

它们是从CSS文件中引用的,我不能在那里有一个版本变量


那么,怎么做呢?

您可以在更改图像文件的同时手动更改CSS文件,在图像url的末尾添加一个“?v=1”


您还可以将服务器配置为通过PHP处理器发送CSS文件,这样您就可以在其中插入一些PHP代码,以便在图像url上设置“?v=8”查询字符串。

作为构建过程的一部分,我在javascript includes和图像url中添加一个查询字符串,该字符串具有文件的最新修改日期/时间。这允许缓存在应该的时候工作,并使开发人员容易忘记的事情自动化。

在最干净和最简单的方法之间,我想:

  • 在CSS中,指向URL包含不同标记的图像;如“
    image.png?版本号”
    ”(文字)
    • 这将允许在开发时使用CSS文件
    • 为了避免缓存出现任何问题,我将配置Apache(在开发机器上)以指示浏览器不应缓存文件
  • 我会使用某种“构建过程”,用每个CSS文件(可能还有JS、PHP、HTML等)中的真实版本号替换这个
    VERSION\u NUMBER
    标记
    • 这将创建包含正确版本号的修改文件
    • 这些文件将是部署到Web服务器的文件
    • 理想情况下,
      版本号
      可以是每个文件的SVN版本;这样,只有真正修改过的文件才需要修改;但更难的是:对于每个文件(CSS文件中的每个URL!),您必须在替换标记之前确定它的修订号
如果某些浏览器因为查询字符串而不缓存images/js/css,那么标记可能会包含在文件名中

现在您有了一个“构建过程”,您还可以使用它进行一些其他操作,例如缩小JS和CSS文件


作为旁注:是的,创建和测试构建过程/脚本需要一些时间;通过PHP服务器CSS文件可能更容易,使用其中的变量来指示版本号。。。但是,就性能而言,提供CSS文件(每个PHP页面至少一个;可能更多!)并不是那么明智;因此,最好多花点时间来编写构建过程…

您是在询问实时更改图像,还是在下一次有人加载页面时,确保他们是从缓存中实时提取的?+1很好的解释。但我正在寻找一种技术,它可以让我从SVN结帐。目前,它可以用于所有文件,但不能用于CSS中的图像。