这几天接触了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> ?>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구