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

<?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/