mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-04-29 18:59:21 +02:00
123 lines
2.2 KiB
PHP
123 lines
2.2 KiB
PHP
<?php
|
|
|
|
class Cache
|
|
{
|
|
protected $_file = false;
|
|
protected $_lifespan = 0;
|
|
protected $_content;
|
|
|
|
const EXT = '.cache.php';
|
|
|
|
|
|
/**
|
|
* @param string $file
|
|
* @access public
|
|
* @return void
|
|
**/
|
|
public function __construct($file) {
|
|
$this->_file = $file . self::EXT;
|
|
$this->setExpiration(config('cache_lifespan'));
|
|
}
|
|
|
|
|
|
/**
|
|
* Sets the cache expiration limit (IMPORTANT NOTE: seconds, NOT ms!).
|
|
*
|
|
* @param integer $span
|
|
* @access public
|
|
* @return void
|
|
**/
|
|
public function setExpiration($span) {
|
|
$this->_lifespan = $span;
|
|
}
|
|
|
|
|
|
/**
|
|
* Set the content you'd like to cache.
|
|
*
|
|
* @param mixed $content
|
|
* @access public
|
|
* @return void
|
|
**/
|
|
public function setContent($content) {
|
|
switch (strtolower(gettype($content))) {
|
|
case 'array':
|
|
$this->_content = json_encode($content);
|
|
break;
|
|
|
|
default:
|
|
$this->_content = $content;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Validates whether it is time to refresh the cache data or not.
|
|
*
|
|
* @access public
|
|
* @return boolean
|
|
**/
|
|
public function hasExpired() {
|
|
if (is_file($this->_file) && time() < filemtime($this->_file) + $this->_lifespan) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns remaining time before scoreboard will update itself.
|
|
*
|
|
* @access public
|
|
* @return integer
|
|
**/
|
|
public function remainingTime() {
|
|
$remaining = 0;
|
|
if (!$this->hasExpired()) {
|
|
$remaining = (filemtime($this->_file) + $this->_lifespan) - time();
|
|
}
|
|
return $remaining;
|
|
}
|
|
|
|
|
|
/**
|
|
* Saves the content into its appropriate cache file.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
**/
|
|
public function save() {
|
|
$handle = fopen($this->_file, 'w');
|
|
fwrite($handle, $this->_content);
|
|
fclose($handle);
|
|
}
|
|
|
|
|
|
/**
|
|
* Loads the content from a specified cache file.
|
|
*
|
|
* @access public
|
|
* @return mixed
|
|
**/
|
|
public function load() {
|
|
if (!is_file($this->_file)) {
|
|
return false;
|
|
}
|
|
|
|
ob_start();
|
|
include_once($this->_file);
|
|
$content = ob_get_clean();
|
|
|
|
if (!isset($content) && strlen($content) == 0) {
|
|
return false;
|
|
}
|
|
|
|
if ($content = json_decode($content, true)) {
|
|
return (array) $content;
|
|
} else {
|
|
return $content;
|
|
}
|
|
}
|
|
}
|