这几天接触了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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中