diff options
Diffstat (limited to 'admin/survey/minify/lib/Minify/Cache/WinCache.php')
-rw-r--r-- | admin/survey/minify/lib/Minify/Cache/WinCache.php | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/admin/survey/minify/lib/Minify/Cache/WinCache.php b/admin/survey/minify/lib/Minify/Cache/WinCache.php new file mode 100644 index 0000000..089d66d --- /dev/null +++ b/admin/survey/minify/lib/Minify/Cache/WinCache.php @@ -0,0 +1,139 @@ +<?php
+/**
+ * Class Minify_Cache_Wincache
+ * @package Minify
+ */
+
+/**
+ * WinCache-based cache class for Minify
+ *
+ * <code>
+ * Minify::setCache(new Minify_Cache_WinCache());
+ * </code>
+ *
+ * @package Minify
+ * @author Matthias Fax
+ **/
+class Minify_Cache_WinCache implements Minify_CacheInterface
+{
+ /**
+ * Create a Minify_Cache_Wincache object, to be passed to
+ * Minify::setCache().
+ *
+ * @param int $expire seconds until expiration (default = 0
+ * meaning the item will not get an expiration date)
+ *
+ * @throws Exception
+ */
+ public function __construct($expire = 0)
+ {
+ if (!function_exists('wincache_ucache_info')) {
+ throw new Exception("WinCache for PHP is not installed to be able to use Minify_Cache_WinCache!");
+ }
+ $this->_exp = $expire;
+ }
+
+ /**
+ * Write data to cache.
+ *
+ * @param string $id cache id
+ *
+ * @param string $data
+ *
+ * @return bool success
+ */
+ public function store($id, $data)
+ {
+ return wincache_ucache_set($id, "{$_SERVER['REQUEST_TIME']}|{$data}", $this->_exp);
+ }
+
+ /**
+ * Get the size of a cache entry
+ *
+ * @param string $id cache id
+ *
+ * @return int size in bytes
+ */
+ public function getSize($id)
+ {
+ if (!$this->_fetch($id)) {
+ return false;
+ }
+
+ if (function_exists('mb_strlen') && ((int) ini_get('mbstring.func_overload') & 2)) {
+ return mb_strlen($this->_data, '8bit');
+ } else {
+ return strlen($this->_data);
+ }
+ }
+
+ /**
+ * Does a valid cache entry exist?
+ *
+ * @param string $id cache id
+ *
+ * @param int $srcMtime mtime of the original source file(s)
+ *
+ * @return bool exists
+ */
+ public function isValid($id, $srcMtime)
+ {
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
+ }
+
+ /**
+ * Send the cached content to output
+ *
+ * @param string $id cache id
+ */
+ public function display($id)
+ {
+ echo $this->_fetch($id) ? $this->_data : '';
+ }
+
+ /**
+ * Fetch the cached content
+ *
+ * @param string $id cache id
+ *
+ * @return string
+ */
+ public function fetch($id)
+ {
+ return $this->_fetch($id) ? $this->_data : '';
+ }
+
+ private $_exp = null;
+
+ // cache of most recently fetched id
+ private $_lm = null;
+ private $_data = null;
+ private $_id = null;
+
+ /**
+ * Fetch data and timestamp from WinCache, store in instance
+ *
+ * @param string $id
+ *
+ * @return bool success
+ */
+ private function _fetch($id)
+ {
+ if ($this->_id === $id) {
+ return true;
+ }
+
+ $suc = false;
+ $ret = wincache_ucache_get($id, $suc);
+ if (!$suc) {
+ $this->_id = null;
+
+ return false;
+ }
+
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
+ $this->_id = $id;
+
+ return true;
+ }
+}
\ No newline at end of file |