首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php缓存问题

php缓存问题
EN

Stack Overflow用户
提问于 2010-11-24 03:38:31
回答 3查看 512关注 0票数 2

我有一个用于缓存一些图像的类

代码语言:javascript
复制
<?php
class Vp_CacheImage
{
    public function cache($cacheTime, $place) // $place = id of image (between 1 and 100)
    {
        $send_body = true; 
        $etag = '"' . md5(date('d.m.Y', time()) . $place) . '"';
        header("ETag: " . $etag );
        header("Last-modified: " . gmdate("D, d M Y H:i:s", $cacheTime) . " GMT");

        $inm = explode(',', getenv("HTTP_IF_NONE_MATCH"));
        foreach ($inm as $i)
        {
            if (trim($i) == $etag || trim($i) == $cacheTime)
            {
                header ("HTTP/1.0 304 Not Modified");
                $send_body = false;
            }
        }

        if(getenv("HTTP_IF_MODIFIED_SINCE") == gmdate("D, d M Y H:i:s", $cacheTime). " GMT")
        {
            header ("HTTP/1.0 304 Not Modified");
            $send_body = false;
        }

        header("Expires: " . gmdate("D, d M Y H:i:s", time() + Config::$config['cache']['images']['topvideo']) . " GMT");
        header("Cache-Control: max-age=" . Config::$config['cache']['images']['topvideo'] . ", must-revalidate");
        if ($send_body) return true; else return false;
    }
}

它起作用了。但有时我必须重新加载图片,而不是从缓存中获取。该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-24 03:42:23

然后你必须先把它从你的缓存中删除,或者..添加temp。一个随机的标记,比如:?x=234在它后面,并重新加载它。

您也可以将expire设置为重新加载之前的时刻,但这很棘手。

票数 2
EN

Stack Overflow用户

发布于 2010-11-24 03:43:24

您可以简单地将版本附加到图像URL吗?示例: myimage.jpg?v=10

这样做将导致浏览器请求图像的新副本,而不是使用缓存的图像。

票数 0
EN

Stack Overflow用户

发布于 2010-11-24 03:43:42

强制浏览器再次获取图像的最简单方法是将查询字符串附加到文件名的末尾。

例如<img src="/assets/images/abc.png?v2">

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4260057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档