mirror of
				https://github.com/Znote/ZnoteAAC.git
				synced 2025-11-04 04:46:23 +01: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;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 |