【问题标题】:Image cache won't display new edited image图像缓存不会显示新编辑的图像
【发布时间】:2011-08-20 16:21:52
【问题描述】:

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

【问题讨论】:

  • "谁能帮我清除缓存?" - 你这是什么意思?

标签: php caching gd


【解决方案1】:

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

【讨论】:

  • 我没有从 php.ini 加载图像。在html页面上加载BG图像(使用img标签),让用户在BG图像上添加文本(图像文本)并使用php合并并保存图像。保存后重新加载页面,它显示旧的未编辑的 BG 图像,直到我点击 ctrl+F5
  • 啊这个。每次编辑背景图像时,只需将 ?v=something 添加到 bgpath,它就会强制刷新
  • 啊!做到了。谢谢你的提示。
【解决方案2】:

要正确处理图像缓存,您可以在 apache 配置或 htaccess 中编写规则...或者您可以创建简单的“图像提供程序”,例如...

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" />

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 2013-05-23
    • 2017-11-26
    • 2016-07-31
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多