forked from blallo/rss-bridge
c2ea8d0ee9
Previously for each requested format a new cache file was created, though the data is the same. With this the file name no longer depends on the requested output format.
94 lines
2.4 KiB
PHP
94 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* Cache with file system
|
|
*/
|
|
class FileCache extends CacheAbstract{
|
|
protected $cacheDirCreated; // boolean to avoid always chck dir cache existance
|
|
|
|
public function loadData(){
|
|
$this->isPrepareCache();
|
|
|
|
$datas = unserialize(file_get_contents($this->getCacheFile()));
|
|
|
|
return $datas;
|
|
}
|
|
|
|
public function saveData($datas){
|
|
$this->isPrepareCache();
|
|
|
|
//Re-encode datas to UTF-8
|
|
//$datas = Cache::utf8_encode_deep($datas);
|
|
|
|
$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;
|
|
}
|
|
|
|
/**
|
|
* 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 "prepare" 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 ?
|
|
|
|
// FIXME : implement recursive dir creation
|
|
if( is_null($this->cacheDirCreated) && !is_dir($cacheDir) ){
|
|
$this->cacheDirCreated = true;
|
|
|
|
mkdir($cacheDir,0705);
|
|
chmod($cacheDir,0705);
|
|
}
|
|
|
|
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();
|
|
|
|
$stringToEncode = $_SERVER['REQUEST_URI'] . http_build_query($this->param);
|
|
$stringToEncode = preg_replace('/(\?|&)format=[^&]*/i', '$1', $stringToEncode);
|
|
return hash('sha1', $stringToEncode) . '.cache';
|
|
}
|
|
}
|