日期:2014-05-16  浏览次数:20621 次

PHP页面缓存示例:减轻CPU和MYSQL负担

正 文:

刚做完php页面cache方面的东西,做一下笔记:ob_start() :页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;
ob_get_contents() :用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~?:)
ob_end_flush() :表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。首 先,设定过期时间,如果要求缓存文件2个小时过期,就可以设定cache_time为3600*2;通过filectime()来获取缓存文件的创建时间 (或?filemtime()获取修改时间),如果当前时间跟文件的创建时间超过限定的过期时间,就可以通过上面三个函数,首先从数据库中取出 数据,然后开始缓存ob_start(),然后把要生成的页面的html代码写在缓存中,缓存结束后通过ob_get_contents()获取到缓存的 内容,然后通过fwrite把缓存内容写到静态页面html。如果未过期,直接读取cache中的静态页面即可,避免了大量的数据库访问。下面做个示例来说明PHP页面缓存技术:
<?php
$_time?=10;
$dir="D:\\php\\";function?cache_start($_time,?$dir)
{
??$cachefile?=?$dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html';
??$cachetime?=?$_time;
??ob_start();
??if(file_exists($cachefile)?&&?(time()-filemtime($cachefile)?<?$cachetime))
??{
????include($cachefile);
????ob_end_flush();
????exit;
??}
}function?cache_end($dir)
{
??$cachefile?=?$dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html';
??$fp?=?fopen($cachefile,?'w');
??fwrite($fp,?ob_get_contents());
??fclose($fp);
??ob_end_flush();
}cache_start($_time,?$dir);
//以下是输出的内容,放在cache_start和cache_end两个方法之间
for?($i=0;$i<5;$i++)
{
??echo?$i;
??sleep(1);
}
cache_end($dir);
?>