首页 > php教程 > php手册 > 正文

php页面缓存 - jerrylsxu

WBOY
发布: 2016-05-20 10:14:56
原创
1078 人浏览过

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

  这里有缓存技术的简单介绍:http://www.cnblogs.com/penghcn/articles/2720202.html

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

  下面是编码部分。

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

复制代码
<span style="color: #008080;"> 1</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> page_init()
</span><span style="color: #008080;"> 2</span> <span style="color: #000000;">{    
</span><span style="color: #008080;"> 3</span>     <span style="color: #800080;">$url</span> = <span style="color: #800080;">$_SERVER</span>['REQUEST_URI'];<span style="color: #008000;">//</span><span style="color: #008000;">子url,该参数一般是唯一的</span>
<span style="color: #008080;"> 4</span>     <span style="color: #800080;">$pageid</span> = <span style="color: #008080;">md5</span>(<span style="color: #800080;">$url</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 5</span>     <span style="color: #800080;">$dir</span> = <span style="color: #008080;">str_replace</span>('/','_',<span style="color: #008080;">substr</span>(<span style="color: #800080;">$_SERVER</span>['SCRIPT_NAME'],1,-4<span style="color: #000000;">));
</span><span style="color: #008080;"> 6</span>         <span style="color: #008000;">//</span><span style="color: #008000;">目录命名方式,如exp_index</span>
<span style="color: #008080;"> 7</span>     <span style="color: #0000ff;">if</span>(!<span style="color: #008080;">file_exists</span>(<span style="color: #800080;">$pd</span> = PAGE_PATH.<span style="color: #800080;">$dir</span>.'/'))@<span style="color: #008080;">mkdir</span>(<span style="color: #800080;">$pd</span>,0777) or <span style="color: #0000ff;">die</span>("<span style="color: #800080;">$pd目录创建失败</span>"<span style="color: #000000;">);
</span><span style="color: #008080;"> 8</span>         <span style="color: #008000;">//</span><span style="color: #008000;">如cache/page/exp_index/</span>
<span style="color: #008080;"> 9</span>     <span style="color: #008080;">define</span>('PAGE_FILE',<span style="color: #800080;">$pd</span>.<span style="color: #800080;">$pageid</span>.'.html'<span style="color: #000000;">);
</span><span style="color: #008080;">10</span>       <span style="color: #008000;">//</span><span style="color: #008000;">如cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html</span>
<span style="color: #008080;">11</span>     <span style="color: #800080;">$contents</span> = <span style="color: #008080;">file_get_contents</span>(PAGE_FILE);<span style="color: #008000;">//</span><span style="color: #008000;">读出</span>
<span style="color: #008080;">12</span> 
<span style="color: #008080;">13</span>     <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$contents</span> && <span style="color: #008080;">substr</span>(<span style="color: #800080;">$contents</span>, 13, 10) ><span style="color: #000000;"> time() )<span style="color: #008000;">//</span><span style="color: #008000;">对应page_cache()函数中加上的自定义头部</span>
</span><span style="color: #008080;">14</span>     {
<span style="color: #008080;">15</span>         <span style="color: #0000ff;">echo</span> <span style="color: #008080;">substr</span>(<span style="color: #800080;">$contents</span>, 27<span style="color: #000000;">);
</span><span style="color: #008080;">16</span>         <span style="color: #0000ff;">exit</span>(0<span style="color: #000000;">);
</span><span style="color: #008080;">17</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">18</span>     <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;    
</span><span style="color: #008080;">19</span> }        
登录后复制
复制代码

  2.页面缓存函数,这里使用到一个技巧:在缓存文件的内容中加上一个头部信息--过期时间,所以每次只需要对头部中的过期时间和当前时间进行比较(在page_init()函数中进行)就能判断缓存是否过期了。

复制代码
<span style="color: #008080;">1</span> <span style="color: #0000ff;">function</span> page_cache(<span style="color: #800080;">$ttl</span> = 0<span style="color: #000000;">)
</span><span style="color: #008080;">2</span> <span style="color: #000000;">{    
</span><span style="color: #008080;">3</span>     <span style="color: #800080;">$ttl</span> = <span style="color: #800080;">$ttl</span> ? <span style="color: #800080;">$ttl</span> : PAGE_TTL;<span style="color: #008000;">//</span><span style="color: #008000;">缓存时间,默认3600s</span>
<span style="color: #008080;">4</span>     <span style="color: #800080;">$contents</span> = <span style="color: #008080;">ob_get_contents</span>();<span style="color: #008000;">//</span><span style="color: #008000;">从缓存中获取内容</span>
<span style="color: #008080;">5</span>     <span style="color: #800080;">$contents</span> = "<!--page_ttl:".(time() + <span style="color: #800080;">$ttl</span>)."-->\n".<span style="color: #800080;">$contents</span><span style="color: #000000;">;
</span><span style="color: #008080;">6</span>       <span style="color: #008000;">//</span><span style="color: #008000;">加上自定义头部:过期时间=生成时间+缓存时间</span>
<span style="color: #008080;">7</span>     <span style="color: #008080;">file_put_contents</span>(PAGE_FILE, <span style="color: #800080;">$contents</span>);<span style="color: #008000;">//</span><span style="color: #008000;">写入缓存文件中</span>
<span style="color: #008080;">8</span>     <span style="color: #008080;">ob_end_flush</span>();<span style="color: #008000;">//</span><span style="color: #008000;">释放缓存</span>
<span style="color: #008080;">9</span> }    
登录后复制
复制代码

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

复制代码
<span style="color: #008080;">1</span> <span style="color: #000000;">php
</span><span style="color: #008080;">2</span>      page_init();<span style="color: #008000;">//</span><span style="color: #008000;">页面缓存初始化</span>
<span style="color: #008080;">3</span>      <span style="color: #008080;">ob_start</span>();<span style="color: #008000;">//</span><span style="color: #008000;">开启缓存        </span>
<span style="color: #008080;">4</span>  
<span style="color: #008080;">5</span>      ...<span style="color: #008000;">//</span><span style="color: #008000;">代码段</span>
<span style="color: #008080;">6</span>  
<span style="color: #008080;">7</span>      page_cache(60);<span style="color: #008000;">//</span><span style="color: #008000;">一般是最后一行</span>
<span style="color: #008080;">8</span>  
<span style="color: #008080;">9</span>  ?>
登录后复制
复制代码
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板