我已经了解了如何gzip一个css文件,其中创建了一个公共php文件以包含压缩的css文件。问题是我无法让它缓存我的CSS文件。我使用的是Firebug的参考,我实际上已经尝试使用相同的代码来压缩一些JavaScript,并缓存它很好。缓存gzipped css
下面是代码:
if(extension_loaded('zlib')){ ob_start('ob_gzhandler'); } $offset = 60 * 60 * 24 * 31; header('Content-type: text/css'); header ('Cache-Control: max-age=' . $offset . ', must-revalidate'); header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT'); ob_start("compress"); function compress($buffer) { // Remove Comments, White Space, End ;'s $buffer = preg_replace('#/\*.*?\*/#s', '', $buffer); $buffer = preg_replace('/\s*([{}|:;,])\s+/', '$1', $buffer); $buffer = preg_replace('/\s\s+(.*)/', '$1', $buffer); $buffer = str_replace(';}', '}', $buffer); $buffer = str_replace(' {', '{', $buffer); return $buffer; } include('global.css'); if(extension_loaded('zlib')){ ob_end_flush(); }
然后,我只是引用我的PHP文件上的其他页面的CSS文件。 正如你可以看到我已经尝试添加最大年龄的混合,这也证明不成功。
这里是响应头
Date Tue, 21 Jul 2009 19:59:19 GMT Server Apache/1.3.41 (Darwin) PHP/4.4.9 X-Powered-By PHP/4.4.9 Cache-Control max-age=2592000, must-revalidate Expires Thu, 20 Aug 2009 19:59:19 GMT Content-Encoding gzip Vary Accept-Encoding Keep-Alive timeout=15, max=93 Connection Keep-Alive Transfer-Encoding chunked Content-Type text/css
有什么我失踪,或更好的方式去这样做呢?
感谢,
编辑:
检测该文件是否已被变更&发送304如果还没有,在适当头相结合,解决了这个问题的脚本。
亚瑟
嘿安东尼, 我已经尝试添加最后修改,就像你建议与后期和以前的修改日期的组合,没有运气。 我也通过ETag发送标头,如果修改后,它仍然没有缓存... 感谢您的回复,我将把所有这些记在心,以备将来参考和调试。 – askon 2009-07-21 20:53:07