缓存动态内容(PHP)

作者 : OO资源中心 发布时间: 2020-10-23 文章热度:451 共1893个字,阅读需5分钟。 字体:

 

演示如何使用Last Modified和ETag头

优化网站的缓存。如果使用正确,这将加速页面加载。

// 开始输出缓冲,这将捕获所有内容,以便我们可以进行一些计算

ob_start();
 
 
// 示例HTML
print '<html>';
 
// 请在此处输入您的内容:
print '<h1>Example content</h1>';
 
print '<ul>';
for ($x=0; $x < 10; $x++)
    print "<li>List item $x</li>";
 
print '</ul>';
print '</html>';
 
// or include() something here
 
 
// 现在将所有内容从上面保存到变量
$PageContent = ob_get_contents();
 
//并清除缓冲区,因此内容将不会提交给客户端(稍后我们将手动进行处理)
ob_end_clean();
 
 
// 通过使用MD5生成唯一的哈希ID
$HashID = md5($PageContent);
 
//指定页面更改的时间。例如,此日期可以来自数据库或任何文件。在这里,我们定义一个固定的日期值:
$LastChangeTime = 1144055759;
 
//定义代理或缓存的过期时间
$ExpireTime = 3600; // seconds (= one hour)
 
// 获取请求标头:
$headers = apache_request_headers();
// 您也可以使用getallheaders()或$ _SERVER 或HTTP_SERVER_VARS 
 
// 添加页面
header('Content-Type: text/html');
 
// 内容语言
header('Content-language: en');
 
// 设置缓存代理信息:
header('Cache-Control: max-age=' . $ExpireTime); // 必须重新验证
header('Expires: '.gmdate('D, d M Y H:i:s', time()+$ExpireTime).' GMT');
 
// 设置最后修改的标题(这有助于搜索引擎和其他Web工具确定页面是否已更新)
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $LastChangeTime).' GMT');
 
// 发送代表内容的的“ ETag”(这有助于浏览器确定页面是否已更改,或者是否可以从缓存中加载页面-这将加快页面加载速度)
header('ETag: ' . $HashID);
 
 
//如果请求的页面已更改,浏览器会“询问”我们并发送其在内部缓存中的最后修改日期。因此,现在我们可以检查提交的时间是否等于我们的内部时间值。如果是,则页面未更新
 
$PageWasUpdated = !(isset($headers['If-Modified-Since']) and 
    strtotime($headers['If-Modified-Since']) == $LastChangeTime);
 
 
//第二种可能性是浏览器向我们发送他拥有的最后一个Hash-ID。如果他这样做,我们可以通过比较两个ID来确定他是否具有最新版本。 
 
$DoIDsMatch = (isset($headers['If-None-Match']) and 
    ereg($HashID, $headers['If-None-Match']));
 
// 两种方法之一适用吗?
if (!$PageWasUpdated or $DoIDsMatch){
 
    //好的,浏览器已经在其缓存中提供了该页面的最新版本。
    //因此,只需告诉他页面没有被修改,就不要发送内容->这样可以节省带宽并加快访问者的加载速度
 
    header('HTTP/1.1 304 Not Modified');
 
    // 就这样,现在关闭连接:
    header('Connection: close');
 
    //神奇的部分:
    //这里没有内容;-) 
    //仅是标题
 
}
else {
 
    //好吧,浏览器没有最新版本或没有任何版本缓存。因此,我们必须将完整的页面发送给他。
 
    header('HTTP/1.1 200 OK');
 
    // 告诉浏览器内容
    header('Content-Length: ' . strlen($PageContent));
 
    // 发送完整内容
    print $PageContent;
}

 

相关推荐: HTML5:全屏的粒子背景视差动画特效

代码介绍 基于canvas绘制全屏透明的粒子背景,网状粒子跟随鼠标视差背景动画特效。 演示截图 相关推荐: 网页特效:游戏类充值界面ui布局特效介绍 一款简单的最新活动游戏月卡充值套餐界面布局代码。 演示截图 相关推荐: 卡通的数字百分比flash进度条动画素…

 


关注微信公众号『OOINK』

第一时间了解最新资源动态关注OO.INK不迷路~

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
下载资源需要解压密码,解压密码是什么?
如下载的资源需要解压密码,请查看下载页右侧查找解压密码;
如没有解压密码请尝试默认解压密码:www.oo.ink 或者 oo.ink
或者联系我们获取解压密码!
1、本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2、分享目的仅供大家学习和交流,请不要用于商业用途!
3、本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
4、如有链接无法下载、失效或广告,请联系管理员处理!
5、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

OO.INK资源网 » 缓存动态内容(PHP)
+已在风雨中度过
为兴趣而改变,为梦想而努力!
+已坚持更新
时时更新,确保最新~

开通SVIP,畅享全站资源下载~

立即了解