カテゴリー ‘ PHP

FuelPHPのキャッシュライブラリの各メソッドの使用方法


FuelPHPのCacheライブラリには以下の4つのメソッドが5つのメソッドがドキュメントに載っている

  • set
  • get
  • delete
  • delete_all
  • call

それぞれの関数がどのように動作するか確認していきます。

setメソッド

set($identifier, $contents = null, $expiration = false, $dependencies = array())

上記例では、expiration、dependenciesは使用しなかったのでどのように動作するか確認、

まずは、expiration、キャッシュの有効期間を指定してみる

  public function action_cache2()
  {
    // String
    Cache::set('string', 'cache expiration test', 2);
    $data['one'] = Cache::get('string');
    sleep(3);
    $data['three'] = Cache::get('string');

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache2', $data);
  }

わざと、キャッシュの有効期限が切れるように3秒のsleepを入れてからキャッシュの取得を行うと

CacheExpiredExceptionが発生!

なるほど、FuelPHPでは、基本想定しない動作をするとExceptionで通知する仕組みのようだ。

ということでtry-catchを記入する

    // String
    Cache::set('string', 'cache expiration test', 2);
    $data['one'] = Cache::get('string');
    sleep(3);
    try {
      $data['three'] = Cache::get('string');
    } catch (CacheExpiredException $ex) {
      $data['three'] = $ex;
    }

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache2', $data);

こんな感じで実行結果は

なるほど、なんかJavaを使ってた頃を思い出す…なつかしいけどこのこの感じ好きだ!

キャッシュの有効期限たキーを呼び出すと対象のキャッシュをdeleteしてからExceptionを呼んでるみたいなのでキャッシュのファイルはなくなっていました。

内容を確認する為に作りっぱなしにしてみた

{{Fuel_Cache_Properties}}{"created":1322413708,"expiration":1322413710,"dependencies":[],"content_handler":"string"}{{/Fuel_Cache_Properties}}cache expiration test

予想通り、expirationにtime()関数の結果をいれている模様。

今の時間がexpirationを過ぎていないかチェックして時間が経過していた場合にエラーとしていました。

次に「dependencies」これは、予想と動作が少し違ったので

coreのファイルの中を除いてみた、すると次のような事が分かった

キャシュにdependenciesが指定されていた場合、

  • dependenciesで指定された、キーのキャッシュが存在しない。
  • dependenciesで指定された、キーのキャッシュが元のcreatedより新しい(秒単位での比較で>)

が成立するとExceptionが発生する。

Fileストレージを選択した場合、dependenciesのキャッシュの中のcreatedやexpiration、dependeciesは、見てなくてファイルの作成日時を取得して比較していました。

面白いけど、秒単位での比較となるとうーん、微妙。。。

マイクロ秒で比較して欲しいと思うのですが、それでも正直微妙かもですが。

面白いけど、自分なら正直使わないかな。

 getメソッド

get($identifier, $use_expiration = true)

こちらでは「use_expiration」を使ってみる。

ソースはこんな感じ

  public function action_cache4()
  {
    // String
    Cache::set('string', 'cache expiration test', 2);
    sleep(3);
    $data['one'] = Cache::get('string', false);

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache3', $data);
  }

動作は、「use_expiration」にfalseを設定すると有効期間を無視するように設計されていた。

2秒でキャッシュが無効になるところが3秒後にキャッシュデータを取得できた。

柔軟にキャッシュを扱えそうだ。

deleteメソッド

delete($identifier)

まず試してみる

ソースは

  public function action_cache_del()
  {
    // String
    Cache::set('string', 'cache expiration test');
    Cache::delete('string');
    $data['one'] = Cache::get('string');

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache3', $data);
  }

こんな感じ

で、結果は

エラーが発生!!

deleteの次のgetでエラーが発生ちゃんとキャッシュのキーを元にキャシュ情報が削除されている模様

delete_allメソッド

delete_all($section = null, $driver = null)

試してみる、ソースは以下のような感じ

  public function action_cache_alldel()
  {
    // String
    Cache::set('string', 'cache expiration test');
    Cache::delete_all();

    $this->template->title = 'Test » Cache';
    $this->template->content = View::forge('test/cache3', $data);
  }

実行後にキャッシュのフォルダを除いてみると、
今まであった全てのキャッシュ情報が削除されました。

callメソッド

call($identifier, $callback, $args = array(), $expiration = null, $dependencies = array())

これは、何に使うんだろう???と謎だったのでソースよんでみました。

第1引数で渡したキーの値でキャッシュに問い合せて、

存在しなかったら、第2引数、第3引数を使用してPHPの「call_user_func_array」関数を呼び出す。

取得出来た結果をキャッシュに保存し、処理結果として呼び出し元に戻すという処理になっていた。

これは、これで中々の機能で面白い!!

FuelPHPでキャッシュを使用するならこのメソッドはかなりオススメなメソッドです。

長くなりましたが、

Fileでのキャッシュと各メソッドの機能を調べた結果でした。

次回は、APCでのキャッシュの方法を調べたいと思います。

FuelPHPでのキャッシュライブラリの調査


FuelPHPでの機能を1つずつ使って行こうと考えています。

まず第1回目は、「Cache」です。

いきなりキャッシュ?って思った人も我慢して下さい。

個人的に興味のある機能の使い方から調べています。

まず、使用する為のconfigファイルは、

各プロジェクトの

「fuel/core/config/cache.php」

にありました。

coreの中にconfigがあるの?と思いました。

多分coreの中のconfigを修正しなくても環境毎に変えられるようにできてるんじゃないのと思っています。

その調査はまた後日、

まず、用意されているcacheの方法として

  • file
  • apc
  • memcached
  • redis

の4種類が使用出来るようになっていました。

基本は、

configの設定でcacheのストレージを決めて、

staticなget、set、deleteのメソッドで関数の登録、取得、削除処理を行うようです。

次回は各メソッドの使い方を調べます。

FuelPHPのインストール(コマンドラインを使用)


FuelPHPでコマンドラインを使用したFuelPHPのインストール方法

公式ドキュメントのこちらのページを参考に行いました。

まず、

curl get.fuelphp.com/oil | sh

を実行となっていたが、何してるのか中身を少し除いてみた。

最初のcurlで取得しているoilの中で「installer.sh」というshファイルをダウンロードしてそれを

「/usr/bin」に「oil」という名前でダウンロードして実行権限を付与するという処理が書かれていた。

もし

「/usr/bin」の中を汚したくない人は独自にダウンロードして設定する必要があります。

その後、Webアプリケーションを設定したい箇所で

oil create <project_name>

を実行する。

そうするとgitからfuelphpをダウンロードして必要なフォルダ権限を付与してくれます。

作成されたプロジェクトフォルダに「public」というフォルダが作成されているので

このフォルダにWebサーバのDocumentRootを設定する事で動作します。

これでFuelPHPをとりあえず動かす事ができます。

 

CodeIgniterから乗り換えるフレームワーク候補FuelPHP


CodeIgniterのライセンスの問題があり、今後業務で使用していくと不都合が生じる可能性があるので

この土日、代わりになるフレームワークを探していました。

もう、自作フレームワークにしようかとも思いましたが、

業務で使用する場合に、

  1. 学習コストが低い事
  2. ドキュメントが充実している事
  3. 信頼性がある事

という3点は必要となると自作はまずい!

今日ツイッターでFuelPHPというものがあることを知りました。

CodeIgniterを開発していた人も関わっているフレームワークだそうです。

これは希望が持てると言う事で、今注目してます。

DooPHPのDemoとソースを動かしてみた感想


DooPHPのダウンロードしたソースの中のdemosを動かしてみた感想です。

routingの仕組みは、とても分かりやすく気に入りました。

ですが・・・。付属のテンプレートエンジンは少し動作が思いような気が…。

でデータベースの接続ですが、unix_socketの接続をconfigで設定するには強引に設定するしかない

うーん微妙…。

 

軽くていいなぁと思ったのですが、「帯に短し、タスキに流し」

やっぱりCodeIgniterの方が私にはあっていると思うのが感想です。

 

次は、「FuelPHP」って新しいCodeIgniterにも関係していた人が作っているフレームワークがあるみたいなので

ちょっと調査してみます。

return top