Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何强制浏览器在每次页面加载时直接从服务器中提取图像?_Php_Image_Caching_Browser_Header - Fatal编程技术网

PHP:如何强制浏览器在每次页面加载时直接从服务器中提取图像?

PHP:如何强制浏览器在每次页面加载时直接从服务器中提取图像?,php,image,caching,browser,header,Php,Image,Caching,Browser,Header,基本上,我有一个页面,用户可以上传他们的个人资料图片。但是,如果他们正在替换当前页面,在新页面覆盖旧页面后,旧页面在页面重新加载后仍会出现,因为可能是因为旧页面被缓存了 在PHP中,我尝试使用: header("Cache-Control: no-cache, must-revalidate"); header("Expires: -1"); 但至少在谷歌Chrome上是行不通的 你知道我能做些什么吗?当我在上传图片后重新加载页面时,它会迫使浏览器总是从服务器上拉取文件,这样它就会拉取最新的文

基本上,我有一个页面,用户可以上传他们的个人资料图片。但是,如果他们正在替换当前页面,在新页面覆盖旧页面后,旧页面在页面重新加载后仍会出现,因为可能是因为旧页面被缓存了

在PHP中,我尝试使用:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: -1");
但至少在谷歌Chrome上是行不通的

你知道我能做些什么吗?当我在上传图片后重新加载页面时,它会迫使浏览器总是从服务器上拉取文件,这样它就会拉取最新的文件


谢谢

您不需要为图像文件本身而不是PHP脚本发送缓存头。如果禁用缓存,用户必须在每次请求时下载映像,那么您的站点性能就会很差


标准做法是在替换图像时使用新文件名,或者至少在其名称后附加某种版本。e、 g.image.jpg?v=xxx。

您不需要为图像文件本身发送缓存头,而不需要为PHP脚本发送缓存头。如果禁用缓存,用户必须在每次请求时下载映像,那么您的站点性能就会很差


标准做法是在替换图像时使用新文件名,或者至少在其名称后附加某种版本。e、 g.image.jpg?v=xxx。

我建议您在图像url中附加某种$\u GET-parameter,如下所示:

profile_user{user_id}.jpg | png?v={date'Ymdhis}注:伪

上面的结构将导致以下链接:

profile_user001.png?v=20110804191700


New link=browser必须获取一个新的image=victory。

我建议您在图像url中附加某种$\u GET-parameter,如下所示:

profile_user{user_id}.jpg | png?v={date'Ymdhis}注:伪

上面的结构将导致以下链接:

profile_user001.png?v=20110804191700


New link=browser必须获取一个新的image=victory。

只要您关心用HTTP头控制缓存,就必须查看客户端是否使用HTTP 1.1或HTTP 1.0,以及两者之间是否有代理

<>通常指定一个资源不应该被缓存,您可以考虑下面的标题:

header("Pragma: no-cache"); # HTTP 1.0
header("Cache-Control: no-cache"); # HTTP 1.1
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
 # With the two above, the last is not strictly necessary. Prefer a HTTP date in 
 # the past instead of -1 -OR- prefer 0 as it is specified how to deal with it.
有关可以缓存的内容和方式,请参阅;有关特定标题,请参阅

设置正确的头并不意味着您实际上完全控制了浏览器缓存。唯一能做到这一点的是运行客户端的用户。任何客户端都可以配置为忽略这些头并立即缓存。例如,预取的内容,无论什么

然后,您唯一能做的就是在您的案例中更改配置文件图片的URI。例如,每次用户更改其个人资料图片时,您可以计算修订计数器并将其附加到URI。这样做将确保当浏览器请求配置文件图片的修改位置时,将显示正确的图像

如果请求旧版本,则必须重定向到最新版本。重定向响应通常不缓存


使用修订版将有助于用户代理仍在缓存图片,这对您的带宽和页面性能有好处,同时他们将始终显示最新修订版。

只要您关心使用HTTP标头控制缓存,您必须查看客户端是否使用HTTP 1.1或HTTP 1.0,以及两者之间是否存在代理

<>通常指定一个资源不应该被缓存,您可以考虑下面的标题:

header("Pragma: no-cache"); # HTTP 1.0
header("Cache-Control: no-cache"); # HTTP 1.1
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
 # With the two above, the last is not strictly necessary. Prefer a HTTP date in 
 # the past instead of -1 -OR- prefer 0 as it is specified how to deal with it.
有关可以缓存的内容和方式,请参阅;有关特定标题,请参阅

设置正确的头并不意味着您实际上完全控制了浏览器缓存。唯一能做到这一点的是运行客户端的用户。任何客户端都可以配置为忽略这些头并立即缓存。例如,预取的内容,无论什么

然后,您唯一能做的就是在您的案例中更改配置文件图片的URI。例如,每次用户更改其个人资料图片时,您可以计算修订计数器并将其附加到URI。这样做将确保当浏览器请求配置文件图片的修改位置时,将显示正确的图像

如果请求旧版本,则必须重定向到最新版本。重定向响应通常不缓存


使用修订版将有助于用户代理仍在缓存图片,这对您的带宽和页面性能有好处,同时他们始终会显示最新的修订版。

这将在每次页面加载时获取新图像-不知道您的网站有多受欢迎,但可能会对带宽产生巨大影响。另一种方法是将图像上次更新的日期作为参数输入到日期中,然后它只会
当图像实际被更改时,重新加载它。实际上,我本来可以让自己的措辞更好一点——我正在考虑将它在每个页面加载上上传的日期附加为一个字符串,存储在数据库中或任何适合他需要的内容,因为他可能会同时获取有关用户的其他信息。如果我的描述没有任何意义,请告诉我,因为我不太知道如何描述我看到的东西-非常有趣。由于这只是在用户上传新图片后立即查看的页面上,我是否可以简单地在末尾添加一个随机数,以便它总是在随后的页面加载中检索新上传的图片?是,一个随机数将使它重新加载图像,因为它需要请求新文件。只要您将其放入图像位置的查询字符串中。这将在每次页面加载时获取一个新图像-不知道您的网站有多受欢迎,但可能会带来巨大的带宽影响。另一种方法是将图像最后一次更新的日期作为参数输入日期,然后它只会在图像实际发生更改时重新加载图像。实际上,我可以对自己的措辞做得更好一点-我正在考虑将上传到每个页面的日期附加为字符串,存储在DB中或任何适合其需要的内容,因为他可能会同时获取一些关于用户的其他信息。如果我的描述没有任何意义,请告诉我,因为我不太知道如何描述我看到的东西-非常有趣。由于这只是在用户上传新图片后立即查看的页面上,我是否可以简单地在末尾添加一个随机数,以便它总是在随后的页面加载中检索新上传的图片?是,随机数将使其重新加载图像,因为它需要请求新文件。只要将其放入图像位置的查询字符串中,则不需要为图像文件本身发送缓存头。有趣的是,我该怎么做呢?您将不需要为图像文件本身发送缓存头。有意思,我该怎么做?