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

问题描述:

我正在构建一个PHP脚本来写入背景图像的文本。 我使用GD功能如imagecopy(), imagejpeg(), imagedestroy()合并保存文本图像和背景图像。一切都很完美。表单提交后,新图像将保存在背景图像的相同文件名中,等等页面重新加载时,编辑后的图像不会显示在浏览器上。它需要我使用Ctrl + F5(在Windows上)刷新页面以加载编辑后的图像。任何人都可以帮助我如何清除缓存?图像缓存将不会显示新的编辑图像

+0

“谁能帮助我如何清除缓存?” - 这是什么意思? –

只需添加?V =什么背景路径每次你编辑你的背景图片,这将迫使刷新

+0

我不是从PHP加载图像。在HTML页面加载BG图像(使用img标签),让用户在BG图像上添加文本(图像文本),并使用php合并并保存图像。保存后重新加载页面,它显示旧的未编辑的BG图像,直到我按Ctrl + F5 – devdarsh

+1

啊这一个。只需在每次编辑背景图像时添加?v =东西到bgpath,它会强制刷新 – genesis

+0

啊!那样做了。感谢您的提示雅。 – devdarsh

要妥善处理图像缓存,你可以在你的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" />