php 用ob_start()实现页面的缓存

ob_start()是一个很好用的函数,使用如下:

ob_start(); //开启缓冲区
echo "缓冲内容";
$info = ob_get_contents(); // 获取缓存的内容
ob_flush(); // 输出缓存内容
ob_end_clean(); // 清空缓冲区

开始ob_start之后,所有内容将不会被输出,直到调用ob_flush();

 

因此我们可以是利用这个方法实现页面的缓存:

// 如果开启缓存、缓存当前页面
ob_start();
echo "<!-- " . current_url . " -->\r\n";
// 加载要缓存的页面
require($view);
// 获取缓存页面内容
$info = ob_get_contents();
// 输出到浏览器
ob_flush();
// 清空缓存
ob_end_clean();
// 把页面内容写入到文件中,下次直接使用
// 用md5加密当前请求地址的url
$file = fopen('view/temp/' . md5(current_url), 'w+');
// 锁定当前文件
if(flock($file, LOCK_EX)){
	fwrite($file, $info);
	flock($file, LOCK_UN);
}
// 关闭文件
fclose($file);

在下次请求时,获取url,判断文件是否存在,如果存在就直接读取缓存的页面,如果不存在,生成缓存页面:

$temp_file = 'view/temp/' . md5(current_url);
if(file_exists($temp_file)){
	// 如果有缓存文件 加载缓存文件 且不继续执行
	require($temp_file);
	return;
}else{
        //生成缓存页面
}

 

发表评论