PHP 用 YAML パーサ spyc の結果をキャッシュする方法

comments(3) | trackback(1)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

<?php
class CacheYAML
{
    var $cache_dir;
    var $filename;
    var $cache_filename;

    function CacheYAML($cache_dir, $filename)
    {
        $this->cache_dir = $cache_dir;
        $this->filename = $filename;
        $this->cache_filename = $cache_dir . DIRECTORY_SEPARATOR . md5($filename);
    }

    function getData()
    {
        return $this->isCached() ? $this->load() : $this->store();
    }

    function isCached()
    {
        clearstatcache();
        return file_exists($this->cache_filename) && (filemtime($this->filename) <= filemtime($this->cache_filename));
    }

    function load()
    {
        return unserialize(file_get_contents($this->cache_filename));
    }

    function store()
    {
        $data = Spyc::YAMLLoad($this->filename);
        $f = fopen($this->cache_filename, 'wb');
        fwrite($f, serialize($data));
        fclose($f);
        return $data;
    }
}
?>


- 使い方

// 使用前
$config = Spyc::YAMLLoad($file);

// 使用後
$yaml = new CacheYAML('path/to/cache_dir', $file);
$config = $yaml->getData();


  元ネタの記事では,parse_ini_file() をキャッシュしていたので,いつも遅いと感じていた spyc の結果をキャッシュするようにしてみた.
  体感できるくらい速くなりました.

  PHP 5.x を使っている場合は,fopen ... fclose の部分を file_put_contents() で置き換えることができます.

  # ところで YAML ってなんて読むんだろう?わいえーえむえる?やむる?

- file_put_contents
  http://php.net/file_put_contents

- ref.: Sooey - CachedIni class
  http://www.sooey.com/journal/2006/03/15/100/

タグ: [PHP]

この記事へのコメント

やはり、YAMLはヤムルでしょうかねぇ
気になるのはspycはスパイク?スピック?とか...
http://spyc.sourceforge.net/

nowel | 2006/03/17 (Fri) 20:44:55

やっぱりヤムルですか.

> 気になるのはspyc
むむむ,スパイクでいいような気もしますねぇ.

sunaoka | 2006/03/18 (Sat) 05:41:49

スパイシー

名無し | 2007/04/11 (Wed) 11:53:45

この記事へのコメントを書く

名前:

メールアドレス (公開されません):

URL:

コメント (入力必須)

この記事へのトラックバック URL

http://cl.pocari.org/tb.php/2006-03-17-2

この記事へのトラックバック

たくさんのパラメータを効率よく管理する

データベース接続パラメータ、テンプレート関数の色定義、絵文字などの各種変換テーブ

Kwappa開発室 | 2008/03/30 (Sun) 19:50:14