微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 缓存gzipped css

我已经学过一些关于如何gzip一个css文件的教程,你可以在其中创建一个公共PHP文件来包含压缩的css文件.问题是我无法让它缓存我的css文件.我正在使用firebug作为参考,我实际上尝试使用相同的代码来压缩一些 javascript并且它可以很好地缓存它.

这是代码

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+(.*)/',$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(如果没有),结合正确的标题解决了这个问题.

亚瑟

尝试将此添加标题集: –
$offset = 60 * 60 * 24;
header('Content-type: text/css');
header('Cache-Control: max-age=' . $offset);
header('Expires: ' . gmdate ("D,time() + $offset) . ' GMT');
header('Last-Modified: ' . gmdate ("D,time()) . ' GMT');

问题是缓存控制头中的必须重新验证指令.这将导致客户端在每次需要时重新请求css,并且您的代码没有处理If-Modified-Since标头和发送304未修改的响应状态代码.

上述方法将缓存周期缩短为1天,并消除了必须重新验证的指令.它还添加了Last-Modified标头(当缺少Last-Modified或ETag标头时,缓存可以选择不缓存项目).

要改进这一点,您可以找到正在压缩的css文件的实际上次修改时间,并将其作为Last-Modified标头发送.您可以在代码中包含请求If-Modified-Since标头与上次修改间的css文件值的比较.如果你发现它们相同,发送这组标题,但也发送304 Unmodfied状态,并且根本不发送正文. (我不是一个真正的PHP人员,所以我将把它留给PHP专家放在另一个答案中).

对您希望客户端缓存css多长时间进行实际评估,然后再次尝试检索css并相应地设置max-age值.

原文地址:https://www.jb51.cc/php/137373.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐