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{ //生成缓存页面 }