在网站上,我使用PHP的ImageMagick扩展动态生成图像。我使用.htaccess文件到结尾是.jpg文件重写PHP文件动态生成:如何缓存PHP动态生成的图像?
RewriteRule ^([^_]+).jpg index.php?filename=$1
我那么PHP文件中创建图像为JPG:
$img->setImageFormat('jpeg');
之前呼应的形象,我发出以下标题:但是
header("Content-Type: image/jpeg");
header('Expires: Mon, 26 Jul 2027 05:00:00 GMT');
header("Pragma: cache");
header("Cache-Control: max-age=290304001");
,使用Chrome的“?难道缓存”扩展名,我可以看到,所述的动态生成的图像是而不是被缓存。此外,尽管已将标头设置为Content-Type: image/jpeg
,Google Chrome的控制台却说“资源解释为文档,但是以MIME类型图像/ jpeg传输”。
所以,我想缓存.htaccess的使用如下:
<filesMatch "\.(jpg)$">
Header set Cache-Control "max-age=290304001, public"
</filesMatch>
但也没有不工作。
于是,我又试图加入php
拓的.htaccess条件:
<filesMatch "\.(jpg|php)$">
Header set Cache-Control "max-age=290304001, public"
</filesMatch>
这最后工作和图像得到缓存。所以我放心,我得到它的工作,但这种反复试验的方法让我感到不安,我不明白为什么PHP缓存头不起作用。
问题:
1)操作的方式从.htaccess文件缓存用PHP动态生成图像的正确方法缓存?
2)为什么PHP发出的缓存头有没有效果?
3)为什么Chrome的控制台说:“资源解释为文档,但与MIME类型的图像/ JPEG转移”的时候,头已被设置为image/jpeg
?
4)是否有更好的方式缓存动态生成的图像与PHP(也许使用纯PHP没有.htaccess)?
不幸的是,没有奏效。如果我禁用.htaccess缓存并添加'header(“Last-Modified:Fri,2016年5月13日13:16:19 GMT”);'我已经列出的其他PHP缓存标题,生成的图像,并且Cache-Control返回'max-age = 0,no-cache,no-store,must-revalidate' with Pragma'no-cache'。任何想法为什么PHP缓存头被完全忽略? – ProgrammerGirl
你是否在图像回显后退出()?回声后是否有任何代码被执行,它可能会重写头文件? –
你确定php脚本执行完毕吗? :) –