ホームページ >バックエンド開発 >PHPチュートリアル >PHPページのキャッシュ
ここ数日間、phpcms のページ キャッシュにさらされており、いくつかの感情を抱いています。その利点については詳しく説明しませんが、これは通常、データベース クエリが多数含まれるページで使用され、挿入、変更、削除されるページには適していません。
キャッシュ技術の簡単な紹介は次のとおりです: http://www.cnblogs.com/penghcn/articles/2720202.html
PHP ページのキャッシュは主に、ob_start()、ob_end_flush() などの ob シリーズの関数を使用します。 , 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. 関数の使用法、これら 2 つの関数の実行順序に注意し、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 チュートリアルに興味のある友人に役立つことを願っています。