Create cache for Markdown content. #51
Cette révision appartient à :
95
libs/Cache.php
Fichier normal
95
libs/Cache.php
Fichier normal
@ -0,0 +1,95 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
Référencer dans un nouveau ticket
Bloquer un utilisateur