요 며칠간 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> 1</span><span>function</span><span> page_init() </span><span> 2</span><span>{ </span><span> 3</span><span>$url</span> = <span>$_SERVER</span>['REQUEST_URI'];<span>//</span><span>子url,该参数一般是唯一的</span><span> 4</span><span>$pageid</span> = <span>md5</span>(<span>$url</span><span>); </span><span> 5</span><span>$dir</span> = <span>str_replace</span>('/','_',<span>substr</span>(<span>$_SERVER</span>['SCRIPT_NAME'],1,-4<span>)); </span><span> 6</span><span>//</span><span>目录命名方式,如exp_index</span><span> 7</span><span>if</span>(!<span>file_exists</span>(<span>$pd</span> = PAGE_PATH.<span>$dir</span>.'/'))@<span>mkdir</span>(<span>$pd</span>,0777) or <span>die</span>("<span>$pd目录创建失败</span>"<span>); </span><span> 8</span><span>//</span><span>如cache/page/exp_index/</span><span> 9</span><span>define</span>('PAGE_FILE',<span>$pd</span>.<span>$pageid</span>.'.html'<span>); </span><span>10</span><span>//</span><span>如cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html</span><span>11</span><span>$contents</span> = <span>file_get_contents</span>(PAGE_FILE);<span>//</span><span>读出</span><span>12</span><span>13</span><span>if</span>(<span>$contents</span> && <span>substr</span>(<span>$contents</span>, 13, 10) ><span> time() )<span>//</span><span>对应page_cache()函数中加上的自定义头部</span></span><span>14</span> { <span>15</span><span>echo</span><span>substr</span>(<span>$contents</span>, 27<span>); </span><span>16</span><span>exit</span>(0<span>); </span><span>17</span><span> } </span><span>18</span><span>return</span><span>true</span><span>; </span><span>19</span> }
2. 페이지 캐싱 기능 , 여기에 트릭이 사용됩니다. 캐시 파일의 내용에 헤더 정보(만료 시간)를 추가하므로 매번 헤더의 만료 시간과 현재 시간(page_init() 함수에서 수행)만 비교하면 됩니다. ) 캐시가 만료되었는지 확인할 수 있습니다.
<span>1</span><span>function</span> page_cache(<span>$ttl</span> = 0<span>) </span><span>2</span><span>{ </span><span>3</span><span>$ttl</span> = <span>$ttl</span> ? <span>$ttl</span> : PAGE_TTL;<span>//</span><span>缓存时间,默认3600s</span><span>4</span><span>$contents</span> = <span>ob_get_contents</span>();<span>//</span><span>从缓存中获取内容</span><span>5</span><span>$contents</span> = "<!--page_ttl:".(time() + <span>$ttl</span>)."-->\n".<span>$contents</span><span>; </span><span>6</span><span>//</span><span>加上自定义头部:过期时间=生成时间+缓存时间</span><span>7</span><span>file_put_contents</span>(PAGE_FILE, <span>$contents</span>);<span>//</span><span>写入缓存文件中</span><span>8</span><span>ob_end_flush</span>();<span>//</span><span>释放缓存</span><span>9</span> }
3. 기능 사용법, 이 두 함수에는 실행 순서가 있으며, ob_start()
<span>1</span> <span>php </span><span>2</span> page_init();<span>//</span><span>页面缓存初始化</span><span>3</span><span>ob_start</span>();<span>//</span><span>开启缓存 </span><span>4</span><span>5</span> ...<span>//</span><span>代码段</span><span>6</span><span>7</span> page_cache(60);<span>//</span><span>一般是最后一行</span><span>8</span><span>9</span> ?>
위에서는 PHP 페이지 캐싱에 대한 내용을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.