<?php namespace Todaymade\Daux; use Symfony\Component\Console\Output\OutputInterface; use Todaymade\Daux\Daux; class Cache { static $printed = false; protected static function getDirectory() { $dir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . "dauxio" . DIRECTORY_SEPARATOR; if (!Cache::$printed) { Cache::$printed = true; Daux::writeln("Using cache dir '$dir'", OutputInterface::VERBOSITY_VERBOSE); } return $dir; } /** * Store an item in the cache for a given number of minutes. * * @param string $key * @param mixed $value * @return void */ public static function put($key, $value) { Cache::ensureCacheDirectoryExists($path = Cache::path($key)); file_put_contents($path, serialize($value)); } /** * Create the file cache directory if necessary. * * @param string $path * @return void */ protected static function ensureCacheDirectoryExists($path) { $parent = dirname($path); if (!file_exists($parent)) { mkdir($parent, 0777, true); } } /** * Remove an item from the cache. * * @param string $key * @return bool */ public static function forget($key) { $path = Cache::path($key); if (file_exists($path)) { return unlink($path); } return false; } /** * Retrieve an item from the cache by key. * * @param string|array $key * @return mixed */ public static function get($key) { $path = Cache::path($key); if (file_exists($path)) { return file_get_contents($path); } return null; } /** * Get the full path for the given cache key. * * @param string $key * @return string */ protected static function path($key) { $parts = array_slice(str_split($hash = sha1($key), 2), 0, 2); return Cache::getDirectory().'/'.implode('/', $parts).'/'.$hash; } }