You've already forked joomla_test
							
							
		
			
				
	
	
		
			195 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package     Joomla.Platform
 | |
|  * @subpackage  Cache
 | |
|  *
 | |
|  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 | |
|  * @license     GNU General Public License version 2 or later; see LICENSE
 | |
|  */
 | |
| 
 | |
| defined('JPATH_PLATFORM') or die;
 | |
| 
 | |
| /**
 | |
|  * WINCACHE cache storage handler
 | |
|  *
 | |
|  * @package     Joomla.Platform
 | |
|  * @subpackage  Cache
 | |
|  * @see         http://php.net/manual/en/book.wincache.php
 | |
|  * @since       11.1
 | |
|  */
 | |
| class JCacheStorageWincache extends JCacheStorage
 | |
| {
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 *
 | |
| 	 * @param   array  $options  Optional parameters.
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function __construct($options = array())
 | |
| 	{
 | |
| 		parent::__construct($options);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get cached data from WINCACHE by id and group
 | |
| 	 *
 | |
| 	 * @param   string   $id         The cache data id
 | |
| 	 * @param   string   $group      The cache data group
 | |
| 	 * @param   boolean  $checkTime  True to verify cache time expiration threshold
 | |
| 	 *
 | |
| 	 * @return  mixed  Boolean false on failure or a cached data string
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function get($id, $group, $checkTime = true)
 | |
| 	{
 | |
| 		$cache_id = $this->_getCacheId($id, $group);
 | |
| 		$cache_content = wincache_ucache_get($cache_id);
 | |
| 		return $cache_content;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get all cached data
 | |
| 	 *
 | |
| 	 * @return  array    data
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function getAll()
 | |
| 	{
 | |
| 		parent::getAll();
 | |
| 
 | |
| 		$allinfo = wincache_ucache_info();
 | |
| 		$keys = $allinfo['cache_entries'];
 | |
| 		$secret = $this->_hash;
 | |
| 		$data = array();
 | |
| 
 | |
| 		foreach ($keys as $key)
 | |
| 		{
 | |
| 			$name = $key['key_name'];
 | |
| 			$namearr = explode('-', $name);
 | |
| 			if ($namearr !== false && $namearr[0] == $secret && $namearr[1] == 'cache')
 | |
| 			{
 | |
| 				$group = $namearr[2];
 | |
| 				if (!isset($data[$group]))
 | |
| 				{
 | |
| 					$item = new JCacheStorageHelper($group);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					$item = $data[$group];
 | |
| 				}
 | |
| 				if (isset($key['value_size']))
 | |
| 				{
 | |
| 					$item->updateSize($key['value_size'] / 1024);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					// Dummy, WINCACHE version is too low.
 | |
| 					$item->updateSize(1);
 | |
| 				}
 | |
| 				$data[$group] = $item;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $data;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Store the data to WINCACHE by id and group
 | |
| 	 *
 | |
| 	 * @param   string  $id     The cache data id
 | |
| 	 * @param   string  $group  The cache data group
 | |
| 	 * @param   string  $data   The data to store in cache
 | |
| 	 *
 | |
| 	 * @return  boolean  True on success, false otherwise
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function store($id, $group, $data)
 | |
| 	{
 | |
| 		$cache_id = $this->_getCacheId($id, $group);
 | |
| 		return wincache_ucache_set($cache_id, $data, $this->_lifetime);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Remove a cached data entry by id and group
 | |
| 	 *
 | |
| 	 * @param   string  $id     The cache data id
 | |
| 	 * @param   string  $group  The cache data group
 | |
| 	 *
 | |
| 	 * @return  boolean  True on success, false otherwise
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function remove($id, $group)
 | |
| 	{
 | |
| 		$cache_id = $this->_getCacheId($id, $group);
 | |
| 		return wincache_ucache_delete($cache_id);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Clean cache for a group given a mode.
 | |
| 	 *
 | |
| 	 * @param   string  $group  The cache data group
 | |
| 	 * @param   string  $mode   The mode for cleaning cache [group|notgroup]
 | |
| 	 * group mode    : cleans all cache in the group
 | |
| 	 * notgroup mode : cleans all cache not in the group
 | |
| 	 *
 | |
| 	 * @return  boolean  True on success, false otherwise
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function clean($group, $mode = null)
 | |
| 	{
 | |
| 		$allinfo = wincache_ucache_info();
 | |
| 		$keys = $allinfo['cache_entries'];
 | |
| 		$secret = $this->_hash;
 | |
| 
 | |
| 		foreach ($keys as $key)
 | |
| 		{
 | |
| 			if (strpos($key['key_name'], $secret . '-cache-' . $group . '-') === 0 xor $mode != 'group')
 | |
| 			{
 | |
| 				wincache_ucache_delete($key['key_name']);
 | |
| 			}
 | |
| 		}
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Force garbage collect expired cache data as items are removed only on get/add/delete/info etc
 | |
| 	 *
 | |
| 	 * @return  boolean  True on success, false otherwise.
 | |
| 	 *
 | |
| 	 * @since   11.1
 | |
| 	 */
 | |
| 	public function gc()
 | |
| 	{
 | |
| 		$allinfo = wincache_ucache_info();
 | |
| 		$keys = $allinfo['cache_entries'];
 | |
| 		$secret = $this->_hash;
 | |
| 
 | |
| 		foreach ($keys as $key)
 | |
| 		{
 | |
| 			if (strpos($key['key_name'], $secret . '-cache-'))
 | |
| 			{
 | |
| 				wincache_ucache_get($key['key_name']);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Test to see if the cache storage is available.
 | |
| 	 *
 | |
| 	 * @return boolean  True on success, false otherwise.
 | |
| 	 *
 | |
| 	 * @since   12.1
 | |
| 	 */
 | |
| 	public static function isSupported()
 | |
| 	{
 | |
| 		$test = extension_loaded('wincache') && function_exists('wincache_ucache_get') && !strcmp(ini_get('wincache.ucenabled'), '1');
 | |
| 		return $test;
 | |
| 	}
 | |
| }
 | 
