第7回 Smartyの便利な機能を使いこなす(その1:キャッシュ前編) - Smarty講座
yossy先生のSmarty講座
Lecutures on PHP
第7回 Smartyの便利な機能を使いこなす(その1:キャッシュ前編) (その3)
キャッシュのクリア
ところで、パラメータも含めてキャッシュされることがわかりましたが、例えばDBが更新され、パラメータに使っていた値も変更されたのでキャッシュをクリアしたいといった場合にはどうしたらいいでしょう?
実はキャッシュをクリアするためのメソッドがちゃんと用意されています。clear_cache()です。
$smarty->clear_cache('test.tpl');
このようにテンプレート名を指定することで、そのキャッシュをクリアすることが出来ます。ちなみに全キャッシュをクリアするにはclear_all_cache()というメソッドを呼びます。
$smarty->clear_all_cache();
一つのページに複数のキャッシュ
ところで、同じテンプレートでも状況によって表示内容を変更したい場合があると思います。例えば、Webメールのようなアプリケーションを作成しようと思ったとき、そのユーザーに届いたメールの一覧が見たいはずなのにメール一覧ページのキャッシュ情報に他の人のメール一覧データが残っていたら大変なことになってしまいます。
そこで、display()メソッドの呼び出し方を変えてみたいと思います。
$smarty->display('test.tpl', $user_id);
今までdisplay()メソッドにはテンプレートファイル名だけを指定してきましたが、実は第2引数にキャッシュを区別するための識別子を与えることが出来ます。
例えばアクセスしているユーザーによって表示を変えたい場合は、そのユーザーのIDを渡すことでユーザーごとキャッシュを分けることが出来るようになります。
display()だけでなく、is_cached()やclear_cache()も同じように識別子を第2引数へ渡すことが出来ます。 また、clear_cache()で識別子を指定し、第1引数のテンプレートの値をNULLにすると、その識別子のキャッシュがすべてクリアされます。
さて、cache_dirの中を見てみましょう。上記の$user_idの値は100とします。
% ls cache 100^%%6D^6D7^6D7C5625%%test.tpl
以下のようなファイルが出来ているかと思います。前述のキャッシュファイル名の先頭に第2引数で指定した識別子が追加されています。このようにして、識別子によってキャッシュを区別するような仕組みになっています。
ここで注意ですが、識別子として渡す値は必ず事前にエラーチェックを行い、おかしな値の時はキャッシュファイルを作らないようにしてください。そうしないと、例えば無意味な値を連続して与えられたりすると、どんどんキャッシュファイルが量産されてしまうのでディスクを溢れさせることが可能になり、セキュリティホールの温床になってしまいます。
さて、今回はここまでです。次回もキャッシュの使い方について説明したいと思います。
その他の記事も見る
- 第1回 Smartyの紹介
- 第2回 Smartyを使ってみる(その1:変数編)
- 第3回 Smartyを使ってみる(その2:制御構造編)
- 第4回 Smartyを使ってみる(その3:関数編)
- 第5回 Smartyを使って実用的なページを作ってみる(その1)
- 第6回 Smartyを使って実用的なページを作ってみる(その2)
- 第7回 Smartyの便利な機能を使いこなす(その1:キャッシュ前編)
- 第8回 Smartyの便利な機能を使いこなす(その2:キャッシュ後編)
- 第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編)
- 第10回 Smartyの便利な機能を使いこなす(その4:プラグイン編)
- 第11回 Smartyとフレームワーク(その1:CakePHP編)
- 第12回 Smartyとフレームワーク(その2:Zend Framework編)
- 第13回 次世代のSmarty - Smarty3の紹介
- 第14回 Smartyでケータイサイトを作ってみる
- >>「yossy先生のSmarty講座」一覧ページに戻る
- yossy先生
本名:吉武 正史
パッケージ系ソフトウェア会社で、自然言語処理系の研究やWebアプリケーション、検索連動型広告などの開発に従事。
2006年末にフリーランスとして独立し、現在はPHPによるWeb開発の業務を中心に、コンサルティングや執筆活動などを展開。
サイトURL:http://freeative.jp/





ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。