我正在构建一个php脚本来在背景图像上写入文本。
我使用像imagecopy(), imagejpeg(), imagedestroy()
这样的GD函数来合并保存文本图像和背景图像。一切都很完美。在表单提交后,新图像将保存在背景图像的相同文件名中,因此在页面重新加载时,编辑后的图像不会显示在浏览器上。它需要我使用ctrl + F5(在Windows上)刷新页面来加载编辑的图像。任何人都可以帮我清除缓存吗?
答案 0 :(得分:4)
每次编辑背景图片时,只需在背景路径中添加?v =某些东西,它就会强制刷新
答案 1 :(得分:1)
要正确处理图像缓存,您可以在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" />