1*04fd306cSNickeau<?php 2*04fd306cSNickeau/** 3*04fd306cSNickeau * A flat-file filesystem cache. 4*04fd306cSNickeau * 5*04fd306cSNickeau * @category Xamin 6*04fd306cSNickeau * @package Handlebars 7*04fd306cSNickeau * @author Alex Soncodi <alex@brokerloop.com> 8*04fd306cSNickeau * @author Behrooz Shabani <everplays@gmail.com> 9*04fd306cSNickeau * @author Mardix <https://github.com/mardix> 10*04fd306cSNickeau * @copyright 2013 (c) Brokerloop, Inc. 11*04fd306cSNickeau * @copyright 2013 (c) Behrooz Shabani 12*04fd306cSNickeau * @copyright 2013 (c) Mardix 13*04fd306cSNickeau * @license MIT 14*04fd306cSNickeau * @link http://voodoophp.org/docs/handlebars 15*04fd306cSNickeau */ 16*04fd306cSNickeau 17*04fd306cSNickeaunamespace Handlebars\Cache; 18*04fd306cSNickeauuse Handlebars\Cache; 19*04fd306cSNickeauuse InvalidArgumentException; 20*04fd306cSNickeauuse RuntimeException; 21*04fd306cSNickeau 22*04fd306cSNickeauclass Disk implements Cache 23*04fd306cSNickeau{ 24*04fd306cSNickeau 25*04fd306cSNickeau private $path = ''; 26*04fd306cSNickeau private $prefix = ''; 27*04fd306cSNickeau private $suffix = ''; 28*04fd306cSNickeau 29*04fd306cSNickeau /** 30*04fd306cSNickeau * Construct the disk cache. 31*04fd306cSNickeau * 32*04fd306cSNickeau * @param string $path Filesystem path to the disk cache location 33*04fd306cSNickeau * @param string $prefix optional file prefix, defaults to empty string 34*04fd306cSNickeau * @param string $suffix optional file extension, defaults to empty string 35*04fd306cSNickeau * 36*04fd306cSNickeau * @throws \RuntimeException 37*04fd306cSNickeau * @throws \InvalidArgumentException 38*04fd306cSNickeau */ 39*04fd306cSNickeau public function __construct($path, $prefix = '', $suffix = '') 40*04fd306cSNickeau { 41*04fd306cSNickeau if (empty($path)) { 42*04fd306cSNickeau throw new InvalidArgumentException('Must specify disk cache path'); 43*04fd306cSNickeau } elseif (!is_dir($path)) { 44*04fd306cSNickeau @mkdir($path, 0777, true); 45*04fd306cSNickeau 46*04fd306cSNickeau if (!is_dir($path)) { 47*04fd306cSNickeau throw new RuntimeException('Could not create cache file path'); 48*04fd306cSNickeau } 49*04fd306cSNickeau } 50*04fd306cSNickeau 51*04fd306cSNickeau $this->path = $path; 52*04fd306cSNickeau $this->prefix = $prefix; 53*04fd306cSNickeau $this->suffix = $suffix; 54*04fd306cSNickeau } 55*04fd306cSNickeau 56*04fd306cSNickeau /** 57*04fd306cSNickeau * Gets the full disk path for a given cache item's file, 58*04fd306cSNickeau * taking into account the cache path, optional prefix, 59*04fd306cSNickeau * and optional extension. 60*04fd306cSNickeau * 61*04fd306cSNickeau * @param string $name Name of the cache item 62*04fd306cSNickeau * 63*04fd306cSNickeau * @return string full disk path of cached item 64*04fd306cSNickeau */ 65*04fd306cSNickeau private function getPath($name) 66*04fd306cSNickeau { 67*04fd306cSNickeau return $this->path . DIRECTORY_SEPARATOR . 68*04fd306cSNickeau $this->prefix . $name . $this->suffix; 69*04fd306cSNickeau } 70*04fd306cSNickeau 71*04fd306cSNickeau /** 72*04fd306cSNickeau * Get cache for $name if it exists. 73*04fd306cSNickeau * 74*04fd306cSNickeau * @param string $name Cache id 75*04fd306cSNickeau * 76*04fd306cSNickeau * @return mixed data on hit, boolean false on cache not found 77*04fd306cSNickeau */ 78*04fd306cSNickeau public function get($name) 79*04fd306cSNickeau { 80*04fd306cSNickeau $path = $this->getPath($name); 81*04fd306cSNickeau 82*04fd306cSNickeau return (file_exists($path)) ? 83*04fd306cSNickeau unserialize(file_get_contents($path)) : false; 84*04fd306cSNickeau } 85*04fd306cSNickeau 86*04fd306cSNickeau /** 87*04fd306cSNickeau * Set a cache 88*04fd306cSNickeau * 89*04fd306cSNickeau * @param string $name cache id 90*04fd306cSNickeau * @param mixed $value data to store 91*04fd306cSNickeau * 92*04fd306cSNickeau * @return void 93*04fd306cSNickeau */ 94*04fd306cSNickeau public function set($name, $value) 95*04fd306cSNickeau { 96*04fd306cSNickeau $path = $this->getPath($name); 97*04fd306cSNickeau 98*04fd306cSNickeau file_put_contents($path, serialize($value)); 99*04fd306cSNickeau } 100*04fd306cSNickeau 101*04fd306cSNickeau /** 102*04fd306cSNickeau * Remove cache 103*04fd306cSNickeau * 104*04fd306cSNickeau * @param string $name Cache id 105*04fd306cSNickeau * 106*04fd306cSNickeau * @return void 107*04fd306cSNickeau */ 108*04fd306cSNickeau public function remove($name) 109*04fd306cSNickeau { 110*04fd306cSNickeau $path = $this->getPath($name); 111*04fd306cSNickeau 112*04fd306cSNickeau unlink($path); 113*04fd306cSNickeau } 114*04fd306cSNickeau 115*04fd306cSNickeau} 116