转到内容


照片

PHP使用强制304缓存静态文件

PHP 缓存

  • 请先登录再回复
这个主题当前没有回复

#1 Jamers

Jamers

    管理员

  • 论坛管理员
  • 226 帖子
  • 呼号:BI4TSQ

发表于 2018-07-26 11:19

很多情况下,用户频繁请求文件,会带走很多流量,其实有的时候根本没必要请求,怎么办呢?通过rewrite把所有的请求集中管理起来,判断有没有缓存,没缓存强制设置缓存,另外检查本地修改时间,如果已经修改直接更新,就是不知道上传到服务器上去的文件修改时间会不会一起改变,待测试!

/*
RewriteEngine on
#RewriteBase /Test/
RewriteCond %{REQUEST_FILENAME} ^.*?\.(css|js|jpg|png)$
RewriteRule ^(.*)$ p304.php/$1 [QSA,PT,L]
*/
//静态文件尝试使用304方式优化
//缓存时间10年
$cache_time = 315360000;
$root = $_SERVER['DOCUMENT_ROOT'];
$file = $_SERVER['REQUEST_URI'];
if (isset($_SERVER['REDIRECT_URL'])) {
    $file = $_SERVER['REDIRECT_URL'];
}else{
    $f = explode('?',$file);
    $file = $f[0];
}

if (file_exists($root.$file)) {
    $is304 = false;
    if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
        $lt = strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]);
        $ft = filemtime($root.$file);
        if ($ft <= $lt) $is304 = true;
    }
    if ($is304) {
        header($_SERVER["SERVER_PROTOCOL"].' 304 Not Modified');
        header("Cache-Control: max-age=$cache_time");
    }else{
        header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
        header("Expires: " . gmdate("D, d M Y H:i:s", time() + $cache_time) . " GMT");
        header("Cache-Control: max-age=$cache_time");
        echo(file_get_contents($root . $file));
    }
}else{
    header($_SERVER["SERVER_PROTOCOL"].' 404 Not Found');
}






同时将以下关键词作为标签:PHP, 缓存

0 用户正在浏览这个主题

0 会员,0 游客,0 隐身会员