0byt3m1n1 - D7net
0byt3m1n1 - D7net
Path:
/
home
/
s13cf5ef
/
www
/
tuscamisetaspersonalizadas
/
libraries
/
joomla
/
cache
/
storage
/
[
Home
]
Name File: eaccelerator.php
< back
<?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; /** * eAccelerator cache storage handler * * @package Joomla.Platform * @subpackage Cache * @link http://eaccelerator.net/ * @since 11.1 */ class JCacheStorageEaccelerator extends JCacheStorage { /** * Constructor * * @param array $options Optional parameters. * * @since 11.1 */ public function __construct($options = array()) { parent::__construct($options); } /** * Get cached data 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 = eaccelerator_get($cache_id); if ($cache_content === null) { return false; } return $cache_content; } /** * Get all cached data * * @return array data * * @since 11.1 */ public function getAll() { parent::getAll(); $keys = eaccelerator_list_keys(); $secret = $this->_hash; $data = array(); foreach ($keys as $key) { /* Trim leading ":" to work around list_keys namespace bug in eAcc. This will still work when bug is fixed */ // http://eaccelerator.net/ticket/287 $name = ltrim($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]; } $item->updateSize($key['size'] / 1024); $data[$group] = $item; } } return $data; } /** * Store the data to 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 eaccelerator_put($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 eaccelerator_rm($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) { $keys = eaccelerator_list_keys(); $secret = $this->_hash; if (is_array($keys)) { foreach ($keys as $key) { /* Trim leading ":" to work around list_keys namespace bug in eAcc. This will still work when bug is fixed */ $key['name'] = ltrim($key['name'], ':'); if (strpos($key['name'], $secret . '-cache-' . $group . '-') === 0 xor $mode != 'group') { eaccelerator_rm($key['name']); } } } return true; } /** * Garbage collect expired cache data * * @return boolean True on success, false otherwise. * * @since 11.1 */ public function gc() { return eaccelerator_gc(); } /** * Test to see if the cache storage is available. * * @return boolean True on success, false otherwise. * * @since 11.1 */ public static function test() { return (extension_loaded('eaccelerator') && function_exists('eaccelerator_get')); } /** * Lock cached item * * @param string $id The cache data id * @param string $group The cache data group * @param integer $locktime Cached item max lock time * * @return boolean True on success, false otherwise. * * @since 11.1 */ public function lock($id, $group, $locktime) { $returning = new stdClass; $returning->locklooped = false; $looptime = $locktime * 10; $cache_id = $this->_getCacheId($id, $group); $data_lock = eaccelerator_lock($cache_id); if ($data_lock === false) { $lock_counter = 0; // Loop until you find that the lock has been released. // That implies that data get from other thread has finished while ($data_lock === false) { if ($lock_counter > $looptime) { $returning->locked = false; $returning->locklooped = true; break; } usleep(100); $data_lock = eaccelerator_lock($cache_id); $lock_counter++; } } $returning->locked = $data_lock; return $returning; } /** * Unlock cached item * * @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 unlock($id, $group = null) { $cache_id = $this->_getCacheId($id, $group); return eaccelerator_unlock($cache_id); } }
©
2018. | Recode by D7net