PHP 用 YAML パーサ spyc の結果をキャッシュする方法
2006-03-17-2: [PHP]
<?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/