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

php – 缓存css和javascript

我在缓存方面遇到麻烦……

我使用这个PHP文件与url重写压缩和缓存css和js

我的印象是,如果我更改/更新了我的一个文件,浏览器将检索更新的文件.但除非我清除缓存或刷新页面,否则它不会.

我的编码错了吗?或者,在缓存过期期限到期之前,浏览器是否不想更新内容

<?PHP
$file = $_SERVER['DOCUMENT_ROOT'].'/'.$_GET['file'];
$last_modified_time = filemtime($file);
$etag = md5_file($file);
$expires = 60*60*24*7;

if(file_exists($file))
{
    if($_SERVER['HTTP_IF_NONE_MATCH'] != $etag)
    {   
        header("Pragma: public");
        header("Cache-Control: maxage=$expires,must-revalidate");
        header('Expires: ' . gmdate('D,d M Y H:i:s',time()+$expires) . ' GMT');
        header("Last-Modified: ".gmdate("D,d M Y H:i:s",$last_modified_time)." GMT");
        header("Etag: \"{$etag}\"");

        if($_GET['type'] == 'js')  header('Content-type: application/javascript');
        if($_GET['type'] == 'css') header('Content-type: text/css');
        if($_GET['type'] == 'ico') header('Content-type: image/x-icon');

        ob_start("ob_gzhandler");       
        include($file);     
    }
    else {

        header('HTTP/1.0 304 Not Modified');
    }
}
else {

    header("HTTP/1.0 404 Not Found");
}
?>

重写规则

RewriteRule ^(.*).js$/compress.PHP?file=$1.js&type=js [L,QSA]
RewriteRule ^(.*).css$/compress.PHP?file=$1.css&type=css [L,QSA]
RewriteRule ^(.*).ico$/compress.PHP?file=$1.ico&type=ico [L,QSA]

———

编辑:也许我应该以不同的方式做这件事?大公司用什么来缓存,以及它们如何在缓存设置为过期之前强制浏览器获取更新的内容

编辑2:谢谢你的帮助.我要用1小时的缓存

解决方法

在给定的Expires标头过期之前,浏览器不会刷新缓存的文件.如果它已过期,它将使用if-none-match标头请求该文件(我猜).

但是你为什么不通过.htaccess处理缓存控制?你可以检查mod_expires

# Expires-Header
ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"

# ETag
FileETag All

Gzip压缩以及mod_deflate

AddOutputFilterByType DEFLATE text/css application/javascript

编辑:’大公司’不使用Expires或max-age标头,或者他们会设置这些标头让缓存文件约1小时 – >与缓存的冲突将被最小化.你将它设置为1周.

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

相关推荐