图像缓存不会显示新编辑的图像


Image cache won't display new edited image

我正在构建一个php脚本来编写背景图像上的文本。我使用像imagecopy(), imagejpeg(), imagedestroy()这样的GD功能来合并保存的文本图像和背景图像。一切都很顺利。在提交表单时,新图像将以与背景图像相同的文件名保存,因此页面重新加载时,编辑后的图像不会显示在浏览器上。它需要我用ctrl + F5(在windows上)刷新页面来加载编辑过的图像。有谁能帮我清除缓存吗?

只需添加?v=something到背景路径每次编辑背景图像时,它将强制刷新

要正确处理图像缓存,您可以在apache配置或htaccess中编写规则…或者你可以创建一个简单的"image provider",比如…

public function img($imgfile = '')
{
    $imgfile = $_GET['q'];
    $age = 60*60*24*31;
    $file = $_SERVER['DOCUMENT_ROOT'].'/'.$imgfile;
    if ( ! file_exists($file))
    {
       header('HTTP/1.0 404 Not Found');
    }
    else
    {
       $last_modified = filemtime($file);
        // Check for cached version
        if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) OR isset($_SERVER['HTTP_IF_NONE_MATCH'])) 
        {
           if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == gmdate('D, d M Y H:i:s 'G'M'T', $last_modified)) 
           {
               header('HTTP/1.0 304 Not Modified');
               exit;
           }
        }   
        if(strpos($imgfile,'.png') !== FALSE)
        {
            Header('Content-Type: image/png');
        }
        elseif(strpos($imgfile,'.jpg') !== FALSE || strpos($img_file,'.jpeg') !== FALSE)
        {
            Header('Content-Type: image/jpg');
        }
        elseif(strpos($img_file,'.gif') !== FALSE)
        {
            Header('Content-Type: image/gif')
        }
        Header('Last-Modified : '.gmdate('D, d M Y H:i:s 'G'M'T', $last_modified));
        Header('Cache-Control : max-age='.$age.', must-revalidate');
        Header('Expires : '.gmdate('D, d M Y H:i:s 'G'M'T', $last_modified + $age));
        echo file_get_contents($file);
}

可以用在图像标签中,比如<img src="provider.php?q=foo.jpg" alt="Foo" />