forked from blallo/rss-bridge
ac0a9a90ad
Previously the cache file name was build on the original request URI which also included the parameters. This could result in different file name for the same request (different format). Removing the format from the request is already done in index.php and could lead to issues in the future (if new parameters are introduced).
112 lines
2.4 KiB
PHP
112 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* Cache with file system
|
|
*/
|
|
class FileCache implements CacheInterface {
|
|
|
|
protected $param;
|
|
|
|
public function loadData(){
|
|
$this->isPrepareCache();
|
|
$datas = unserialize(file_get_contents($this->getCacheFile()));
|
|
return $datas;
|
|
}
|
|
|
|
public function saveData($datas){
|
|
$this->isPrepareCache();
|
|
|
|
$writeStream = file_put_contents($this->getCacheFile(), serialize($datas));
|
|
|
|
if(!$writeStream) {
|
|
throw new \Exception("Cannot write the cache... Do you have the right permissions ?");
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getTime(){
|
|
$this->isPrepareCache();
|
|
|
|
$cacheFile = $this->getCacheFile();
|
|
if(file_exists($cacheFile)){
|
|
return filemtime($cacheFile);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function purgeCache(){
|
|
$cacheTimeLimit = time() - 86400; // 86400 -> 24h
|
|
$cachePath = $this->getCachePath();
|
|
if(file_exists($cachePath)){
|
|
$cacheIterator = new RecursiveIteratorIterator(
|
|
new RecursiveDirectoryIterator($cachePath),
|
|
RecursiveIteratorIterator::CHILD_FIRST
|
|
);
|
|
|
|
foreach($cacheIterator as $cacheFile){
|
|
if(in_array($cacheFile->getBasename(), array('.', '..')))
|
|
continue;
|
|
elseif($cacheFile->isFile()){
|
|
if(filemtime($cacheFile->getPathname()) < $cacheTimeLimit)
|
|
unlink($cacheFile->getPathname());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set HTTP GET parameters
|
|
* @return self
|
|
*/
|
|
public function setParameters(array $param){
|
|
$this->param = $param;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Cache is prepared ?
|
|
* Note : Cache name is based on request information, then cache must be prepare before use
|
|
* @return \Exception|true
|
|
*/
|
|
protected function isPrepareCache(){
|
|
if(is_null($this->param)){
|
|
throw new \Exception('Please feed "setParameters" method before try to load');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return cache path (and create if not exist)
|
|
* @return string Cache path
|
|
*/
|
|
protected function getCachePath(){
|
|
$cacheDir = __DIR__ . '/../cache/'; // FIXME : configuration ?
|
|
|
|
if(!is_dir($cacheDir)){
|
|
mkdir($cacheDir, 0755, true);
|
|
chmod($cacheDir, 0755);
|
|
}
|
|
|
|
return $cacheDir;
|
|
}
|
|
|
|
/**
|
|
* Get the file name use for cache store
|
|
* @return string Path to the file cache
|
|
*/
|
|
protected function getCacheFile(){
|
|
return $this->getCachePath() . $this->getCacheName();
|
|
}
|
|
|
|
/**
|
|
* Determines file name for store the cache
|
|
* return string
|
|
*/
|
|
protected function getCacheName(){
|
|
$this->isPrepareCache();
|
|
return hash('sha1', http_build_query($this->param)) . '.cache';
|
|
}
|
|
}
|