php缓存问题

时间:2010-11-23 19:38:31

标签: php caching

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

<?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;
    }
}

有效。但我有时需要重新加载图片,而不是从缓存中获取。怎么做?

3 个答案:

答案 0 :(得分:2)

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

您也可以在重新加载之前设置到期,但这很棘手。

答案 1 :(得分:0)

您可以简单地将图片附加到图片网址吗?示例:myimage.jpg?v = 10

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

答案 2 :(得分:0)

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

e.g。 <img src="/assets/images/abc.png?v2">