1<?php 2 3/* 4 * This file is part of the Assetic package, an OpenSky project. 5 * 6 * (c) 2010-2014 OpenSky Project Inc 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Assetic\Cache; 13 14/** 15 * A simple filesystem cache. 16 * 17 * @author Kris Wallsmith <kris.wallsmith@gmail.com> 18 */ 19class FilesystemCache implements CacheInterface 20{ 21 private $dir; 22 23 public function __construct($dir) 24 { 25 $this->dir = $dir; 26 } 27 28 public function has($key) 29 { 30 return file_exists($this->dir.'/'.$key); 31 } 32 33 public function get($key) 34 { 35 $path = $this->dir.'/'.$key; 36 37 if (!file_exists($path)) { 38 throw new \RuntimeException('There is no cached value for '.$key); 39 } 40 41 return file_get_contents($path); 42 } 43 44 public function set($key, $value) 45 { 46 if (!is_dir($this->dir) && false === @mkdir($this->dir, 0777, true)) { 47 throw new \RuntimeException('Unable to create directory '.$this->dir); 48 } 49 50 $path = $this->dir.'/'.$key; 51 52 if (false === @file_put_contents($path, $value)) { 53 throw new \RuntimeException('Unable to write file '.$path); 54 } 55 } 56 57 public function remove($key) 58 { 59 $path = $this->dir.'/'.$key; 60 61 if (file_exists($path) && false === @unlink($path)) { 62 throw new \RuntimeException('Unable to remove file '.$path); 63 } 64 } 65} 66