ホームページ  >  記事  >  バックエンド開発  >  PHPページのキャッシュ

PHPページのキャッシュ

WBOY
WBOYオリジナル
2016-07-29 08:51:021200ブラウズ

ここ数日間、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 判定もあります。キャッシュ期間が経過していない場合はキャッシュ ファイルをロードし、そうでない場合はソース ファイルをロードします。

PHPページのキャッシュ

<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> }        

PHPページのキャッシュ

2. ページキャッシュ機能、ここではトリックが使用されています: キャッシュファイルの内容にヘッダー情報 - 有効期限 - を追加するので、修正するだけで済みます毎回ヘッダーの有効期限と現在時刻 (page_init() 関数で実行) を比較することで、キャッシュの有効期限が切れているかどうかを判断できます。

PHPページのキャッシュ

<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> }    

PHPページのキャッシュ

3. 関数の使用法、これら 2 つの関数の実行順序に注意し、ob_start() を忘れないでください

PHPページのキャッシュ

<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 ページ キャッシュについてその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。