php页面缓存ob系列函数介绍

2015-01-24信息快讯网

这几天接触了phpcms的页面缓存,有些感触。其好处就不多说了,它一般是用在数据库查询较多的页面中,对于插入修改删除的页面就不大合适了

这里有缓存技术的简单介绍:http://www.jb51.net/article/4965.htm

  php页面缓存主要用到的是ob系列函数,如ob_start(),ob_end_flush(),ob_get_contents()

  下面是编码部分。

  1.初始化函数,一般是设置页面缓存路径、缓存文件命名格式等,可按个人喜好自定义。这里用到的识别ID是经加密的$_SERVER[REQUEST_URI]参数。这个函数中最后还有一个if判断:若未过缓存期,则加载缓存文件,否则加载源文件。

 
function page_init() 
{ 
$url = $_SERVER['REQUEST_URI'];//子url,该参数一般是唯一的 
$pageid = md5($url); 
$dir = str_replace('/','_',substr($_SERVER['SCRIPT_NAME'],1,-4)); 
//目录命名方式,如exp_index 
if(!file_exists($pd = PAGE_PATH.$dir.'/'))@mkdir($pd,0777) or die("$pd目录创建失败"); 
//如cache/page/exp_index/ 
define('PAGE_FILE',$pd.$pageid.'.html'); 
  //如cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html 
$contents = file_get_contents(PAGE_FILE);//读出 

if($contents && substr($contents, 13, 10) > time() )//对应page_cache()函数中加上的自定义头部 
{ 
echo substr($contents, 27); 
exit(0); 
} 
return true; 
} 


2.页面缓存函数,这里使用到一个技巧:在缓存文件的内容中加上一个头部信息--过期时间,所以每次只需要对头部中的过期时间和当前时间进行比较(在page_init()函数中进行)就能判断缓存是否过期了。
 
function page_cache($ttl = 0) 
{ 
$ttl = $ttl ? $ttl : PAGE_TTL;//缓存时间,默认3600s 
$contents = ob_get_contents();//从缓存中获取内容 
$contents = "<!--page_ttl:".(time() + $ttl)."-->\n".$contents; 
  //加上自定义头部:过期时间=生成时间+缓存时间 
file_put_contents(PAGE_FILE, $contents);//写入缓存文件中 
ob_end_flush();//释放缓存 
} 

3.函数使用,注意这两个函数有先后执行顺序,还有别忘了ob_start()
 
<?php 
page_init();//页面缓存初始化 
ob_start();//开启缓存 

...//代码段 

page_cache(60);//一般是最后一行 

?> 

PHP 过滤页面中的BOM(实现代码)
php小经验:解析preg_match与preg_match_all 函数
解析php session_set_save_handler 函数的用法(mysql)
使用PHP获取当前url路径的函数以及服务器变量
如何使用PHP实现javascript的escape和unescape函数
解析php中的escape函数
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
浅析HTTP消息头网页缓存控制以及header常用指令介绍
解析PHP中的file_get_contents获取远程页面乱码的问题
PHP Class&Object -- 解析PHP实现二叉树
PHP Class&Object -- PHP 自排序二叉树的深入解析
解析PHP中ob_start()函数的用法
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
浅析PHP页面局部刷新功能的实现小结
PHP 清空varnish 缓存的详解(包括指定站点下的)
解析Linux下Varnish缓存的配置优化
解析PHP计算页面执行时间的实现代码
基于PHP输出缓存(output_buffering)的深入理解
控制PHP的输出:缓存并压缩动态页面
PHP Global变量定义当前页面的全局变量实现探讨
PHP 万年历实现代码
php cc攻击代码与防范方法
php模板函数 正则实现代码
PHP获取文件后缀名的三个函数
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
php使HTML标签自动补全闭合函数代码
PHP explode()函数用法、切分字符串
php写的带缓存数据功能的mysqli类
通过缓存数据库结果提高PHP性能的原理介绍
PHP缓存技术的多种方法小结
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
PHP中全局变量global和$GLOBALS[]的区别分析
PHP服务器页面间跳转实现方法
php切割页面div内容的实现代码分享
注册页面之前先验证用户名是否存在的php代码
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
PHP对象Object的概念 介绍
Smarty的配置与高级缓存技术分享
PHP版网站缓存加快打开速度的方法分享
Notice: Trying to get property of non-object problem(PHP)解决办法
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
©2014-2024 dbsqp.com