php网站数据缓存
缓存的作用
有很多工具可以提高网站的访问速度和性能。比如eAccelerator 和 APC,然而,这些都需要在网站的服务器上安装,比较麻烦。
使用PHP编码,我们可以很方便地缓存一个网页,对于那些使用数据库驱动或者是高频率查询数据库的网站,是非常有帮助的。
Output Control 函数
Output Control 函数可以实现缓存文件的效果,利用ob_start(打开输出控制缓冲),ob_get_contents(返回输出缓冲区的内容),将请求的输出结果,保存到缓存文件,下一次请求的时候,如果缓存文件存在并且不过期,则返回缓存文件保存的内容。减少数据查询等操作,提高访问效率。
简单的示例
首先我们需要建立一个文件夹,作为存储缓存文件使用,确保拥有读/写权限。
下一步是创建一个cache.php文件,代码如下:
<?php
// 缓存文件的有效时间,秒
$cache_expires = 3600;
// 生成缓存文件的目录
$cache_folder = "/home/usr/www/cache/";
// 检查缓存文件是否有效
function is_cached($file) {
global $cache_folder, $cache_expires;
$cachefile = $cache_folder . $file;
$cachefile_created = (file_exists($cachefile)) ? @filemtime($cachefile) : 0;
return ((time() - $cache_expires) < $cachefile_created);
}
// 读取缓存文件的内容
function read_cache($file) {
global $cache_folder;
$cachefile = $cache_folder . $file;
return file_get_contents($cachefile);
}
// 写入内容到缓存文件
function write_cache($file, $out) {
global $cache_folder;
$cachefile = $cache_folder . $file;
$fp = fopen($cachefile, 'w');
fwrite($fp, $out);
fclose($fp);
}
// 开始:用请求地址的 md5 作为文件名
$cache_file = md5($_SERVER['REQUEST_URI']) . ".html";
// 先检查缓存文件是否已生成,并且有效,如果为 true,直接读取内容,并完成此请求、退出
if (is_cached($cache_file)) {
echo read_cache($cache_file);
exit();
}
// 打开输出控制缓冲
ob_start();
现在,在你想做任何事情之前,应该先include cache.php文件,因为如果此页面被缓存了,我们不用将做任何事情,直接将内容输出即可。如果在检查缓存文件之前,去include其他文件,或者连接数据库,这些缓存文件将没有什么用处。
最后,创建一个cache_footer.php,包含了一下代码:
<?php
// 获取输出缓冲区的内容,也就是待缓存的内容
$cache_contents = ob_get_contents();
// 保存到缓存文件,以便下次使用
write_cache($cache_file, $cache_contents);
?>
你应当在php的最后一行,包含这个文件,它将能缓存这个文件。
将这2个文件组合起来,大概是这样子:
<?php
// 加载缓存处理
include("cache.php");
// 链接数据库
include("config.php");
mysql_connect($db_host, $db_username, $db_password) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());
?>
<html>
<body>
<h1>Articles</h1>
<?php
// 执行一些数据库查询
$q = mysql_query("SELECT * FROM articles ORDER BY id");
while ($r = mysql_fetch_array($q)) {
echo $r['title'];
}
?>
</body>
</html>
<?php
// 保存到缓存
include("cache_footer.php");
?>