Heim  >  Artikel  >  Backend-Entwicklung  >  php页面缓存ob系列函数介绍_PHP教程

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

WBOY
WBOYOriginal
2016-07-13 09:44:12737Durchsuche

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

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

  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['sc ript_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 = " ".$contents;

  //加上自定义头部:过期时间=生成时间+缓存时间

  file_put_contents(PAGE_FILE, $contents);//写入缓存文件中

  ob_end_flush();//释放缓存

  }

 

  3.函数使用,注意这两个函数有先后执行顺序,还有别忘了ob_start()

  

  page_init();//页面缓存初始化

  ob_start();//开启缓存

  ...//代码段

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

  ?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1049988.htmlTechArticlephp页面缓存ob系列函数介绍 这几天接触了phpcms的页面缓存,有些感触。其好处就不多说了,它一般是用在数据库查询较多的页面中,对于插...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn