diff options
author | 2022-07-01 15:10:30 +0200 | |
---|---|---|
committer | 2022-07-01 15:10:30 +0200 | |
commit | 4f75591060d95208a301bc6bf460d875631b29cc (patch) | |
tree | 4e37d86840e8d990a563ba75d3de6f84a53cc2de /caches/FileCache.php | |
parent | 66568e3a39c61546c09a47a5688914a0bdf3c60c (diff) | |
download | rss-bridge-4f75591060d95208a301bc6bf460d875631b29cc.tar.gz rss-bridge-4f75591060d95208a301bc6bf460d875631b29cc.tar.zst rss-bridge-4f75591060d95208a301bc6bf460d875631b29cc.zip |
Reformat codebase v4 (#2872)
Reformat code base to PSR12
Co-authored-by: rssbridge <noreply@github.com>
Diffstat (limited to 'caches/FileCache.php')
-rw-r--r-- | caches/FileCache.php | 277 |
1 files changed, 145 insertions, 132 deletions
diff --git a/caches/FileCache.php b/caches/FileCache.php index 1b8ae6cd..29f4d78b 100644 --- a/caches/FileCache.php +++ b/caches/FileCache.php @@ -1,137 +1,150 @@ <?php + /** * Cache with file system */ -class FileCache implements CacheInterface { - protected $path; - protected $key; - - public function __construct() { - if (!is_writable(PATH_CACHE)) { - returnServerError( - 'RSS-Bridge does not have write permissions for ' - . PATH_CACHE . '!' - ); - } - } - - public function loadData(){ - if(file_exists($this->getCacheFile())) { - return unserialize(file_get_contents($this->getCacheFile())); - } - - return null; - } - - public function saveData($data){ - // Notice: We use plain serialize() here to reduce memory footprint on - // large input data. - $writeStream = file_put_contents($this->getCacheFile(), serialize($data)); - - if($writeStream === false) { - throw new \Exception('Cannot write the cache... Do you have the right permissions ?'); - } - - return $this; - } - - public function getTime(){ - $cacheFile = $this->getCacheFile(); - clearstatcache(false, $cacheFile); - if(file_exists($cacheFile)) { - $time = filemtime($cacheFile); - return ($time !== false) ? $time : null; - } - - return null; - } - - public function purgeCache($seconds){ - $cachePath = $this->getPath(); - if(file_exists($cachePath)) { - $cacheIterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($cachePath), - RecursiveIteratorIterator::CHILD_FIRST - ); - - foreach($cacheIterator as $cacheFile) { - if(in_array($cacheFile->getBasename(), array('.', '..', '.gitkeep'))) - continue; - elseif($cacheFile->isFile()) { - if(filemtime($cacheFile->getPathname()) < time() - $seconds) - unlink($cacheFile->getPathname()); - } - } - } - } - - /** - * Set scope - * @return self - */ - public function setScope($scope){ - if(is_null($scope) || !is_string($scope)) { - throw new \Exception('The given scope is invalid!'); - } - - $this->path = PATH_CACHE . trim($scope, " \t\n\r\0\x0B\\\/") . '/'; - - return $this; - } - - /** - * Set key - * @return self - */ - public function setKey($key){ - if (!empty($key) && is_array($key)) { - $key = array_map('strtolower', $key); - } - $key = json_encode($key); - - if (!is_string($key)) { - throw new \Exception('The given key is invalid!'); - } - - $this->key = $key; - return $this; - } - - /** - * Return cache path (and create if not exist) - * @return string Cache path - */ - private function getPath(){ - if(is_null($this->path)) { - throw new \Exception('Call "setScope" first!'); - } - - if(!is_dir($this->path)) { - if (mkdir($this->path, 0755, true) !== true) { - throw new \Exception('Unable to create ' . $this->path); - } - } - - return $this->path; - } - - /** - * Get the file name use for cache store - * @return string Path to the file cache - */ - private function getCacheFile(){ - return $this->getPath() . $this->getCacheName(); - } - - /** - * Determines file name for store the cache - * return string - */ - private function getCacheName(){ - if(is_null($this->key)) { - throw new \Exception('Call "setKey" first!'); - } - - return hash('md5', $this->key) . '.cache'; - } +class FileCache implements CacheInterface +{ + protected $path; + protected $key; + + public function __construct() + { + if (!is_writable(PATH_CACHE)) { + returnServerError( + 'RSS-Bridge does not have write permissions for ' + . PATH_CACHE . '!' + ); + } + } + + public function loadData() + { + if (file_exists($this->getCacheFile())) { + return unserialize(file_get_contents($this->getCacheFile())); + } + + return null; + } + + public function saveData($data) + { + // Notice: We use plain serialize() here to reduce memory footprint on + // large input data. + $writeStream = file_put_contents($this->getCacheFile(), serialize($data)); + + if ($writeStream === false) { + throw new \Exception('Cannot write the cache... Do you have the right permissions ?'); + } + + return $this; + } + + public function getTime() + { + $cacheFile = $this->getCacheFile(); + clearstatcache(false, $cacheFile); + if (file_exists($cacheFile)) { + $time = filemtime($cacheFile); + return ($time !== false) ? $time : null; + } + + return null; + } + + public function purgeCache($seconds) + { + $cachePath = $this->getPath(); + if (file_exists($cachePath)) { + $cacheIterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($cachePath), + RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($cacheIterator as $cacheFile) { + if (in_array($cacheFile->getBasename(), ['.', '..', '.gitkeep'])) { + continue; + } elseif ($cacheFile->isFile()) { + if (filemtime($cacheFile->getPathname()) < time() - $seconds) { + unlink($cacheFile->getPathname()); + } + } + } + } + } + + /** + * Set scope + * @return self + */ + public function setScope($scope) + { + if (is_null($scope) || !is_string($scope)) { + throw new \Exception('The given scope is invalid!'); + } + + $this->path = PATH_CACHE . trim($scope, " \t\n\r\0\x0B\\\/") . '/'; + + return $this; + } + + /** + * Set key + * @return self + */ + public function setKey($key) + { + if (!empty($key) && is_array($key)) { + $key = array_map('strtolower', $key); + } + $key = json_encode($key); + + if (!is_string($key)) { + throw new \Exception('The given key is invalid!'); + } + + $this->key = $key; + return $this; + } + + /** + * Return cache path (and create if not exist) + * @return string Cache path + */ + private function getPath() + { + if (is_null($this->path)) { + throw new \Exception('Call "setScope" first!'); + } + + if (!is_dir($this->path)) { + if (mkdir($this->path, 0755, true) !== true) { + throw new \Exception('Unable to create ' . $this->path); + } + } + + return $this->path; + } + + /** + * Get the file name use for cache store + * @return string Path to the file cache + */ + private function getCacheFile() + { + return $this->getPath() . $this->getCacheName(); + } + + /** + * Determines file name for store the cache + * return string + */ + private function getCacheName() + { + if (is_null($this->key)) { + throw new \Exception('Call "setKey" first!'); + } + + return hash('md5', $this->key) . '.cache'; + } } |