第7回 Smartyの便利な機能を使いこなす(その1:キャッシュ前編) - Smarty講座

PHP講座 HTML×CSS 初級編

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);

yossy先生今まで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引数で指定した識別子が追加されています。このようにして、識別子によってキャッシュを区別するような仕組みになっています。

yossy先生ここで注意ですが、識別子として渡す値は必ず事前にエラーチェックを行い、おかしな値の時はキャッシュファイルを作らないようにしてください。そうしないと、例えば無意味な値を連続して与えられたりすると、どんどんキャッシュファイルが量産されてしまうのでディスクを溢れさせることが可能になり、セキュリティホールの温床になってしまいます。

さて、今回はここまでです。次回もキャッシュの使い方について説明したいと思います。

  • yossy先生

本名:吉武 正史

パッケージ系ソフトウェア会社で、自然言語処理系の研究やWebアプリケーション、検索連動型広告などの開発に従事。 2006年末にフリーランスとして独立し、現在はPHPによるWeb開発の業務を中心に、コンサルティングや執筆活動などを展開。
サイトURL:http://freeative.jp/

ご意見・感想フォーム

今回の「yossy先生のSmarty講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:

  



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

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

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)