Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 18.223.195.30
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/src/litespeed-wp-plugin/6.0.0.1/litespeed-cache/src/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/src/litespeed-wp-plugin/6.0.0.1/litespeed-cache/src/object.lib.php
<?php
/**
 * LiteSpeed Object Cache Library
 *
 * @since  1.8
 */
defined('WPINC') || exit();

/**
 * Handle exception
 */
if (!function_exists('litespeed_exception_handler')) {
	function litespeed_exception_handler($errno, $errstr, $errfile, $errline)
	{
		throw new \ErrorException($errstr, 0, $errno, $errfile, $errline);
	}
}

require_once __DIR__ . '/object-cache.cls.php';

/**
 * Sets up Object Cache Global and assigns it.
 *
 * @since 1.8
 *
 * @global WP_Object_Cache $wp_object_cache
 */
function wp_cache_init()
{
	$GLOBALS['wp_object_cache'] = WP_Object_Cache::get_instance();
}

/**
 * Adds data to the cache, if the cache key doesn't already exist.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::add()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The cache key to use for retrieval later.
 * @param mixed      $data   The data to add to the cache.
 * @param string     $group  Optional. The group to add the cache to. Enables the same key
 *                           to be used across groups. Default empty.
 * @param int        $expire Optional. When the cache data should expire, in seconds.
 *                           Default 0 (no expiration).
 * @return bool True on success, false if cache key and group already exist.
 */
function wp_cache_add($key, $data, $group = '', $expire = 0)
{
	global $wp_object_cache;

	return $wp_object_cache->add($key, $data, $group, (int) $expire);
}

/**
 * Adds multiple values to the cache in one call.
 *
 * @since 5.4
 *
 * @see WP_Object_Cache::add_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $data   Array of keys and values to be set.
 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
 * @param int    $expire Optional. When to expire the cache contents, in seconds.
 *                       Default 0 (no expiration).
 * @return bool[] Array of return values, grouped by key. Each value is either
 *                true on success, or false if cache key and group already exist.
 */
function wp_cache_add_multiple(array $data, $group = '', $expire = 0)
{
	global $wp_object_cache;

	return $wp_object_cache->add_multiple($data, $group, $expire);
}

/**
 * Replaces the contents of the cache with new data.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::replace()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The key for the cache data that should be replaced.
 * @param mixed      $data   The new data to store in the cache.
 * @param string     $group  Optional. The group for the cache data that should be replaced.
 *                           Default empty.
 * @param int        $expire Optional. When to expire the cache contents, in seconds.
 *                           Default 0 (no expiration).
 * @return bool True if contents were replaced, false if original value does not exist.
 */
function wp_cache_replace($key, $data, $group = '', $expire = 0)
{
	global $wp_object_cache;

	return $wp_object_cache->replace($key, $data, $group, (int) $expire);
}

/**
 * Saves the data to the cache.
 *
 * Differs from wp_cache_add() and wp_cache_replace() in that it will always write data.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::set()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The cache key to use for retrieval later.
 * @param mixed      $data   The contents to store in the cache.
 * @param string     $group  Optional. Where to group the cache contents. Enables the same key
 *                           to be used across groups. Default empty.
 * @param int        $expire Optional. When to expire the cache contents, in seconds.
 *                           Default 0 (no expiration).
 * @return bool True on success, false on failure.
 */
function wp_cache_set($key, $data, $group = '', $expire = 0)
{
	global $wp_object_cache;

	return $wp_object_cache->set($key, $data, $group, (int) $expire);
}

/**
 * Sets multiple values to the cache in one call.
 *
 * @since 5.4
 *
 * @see WP_Object_Cache::set_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $data   Array of keys and values to be set.
 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
 * @param int    $expire Optional. When to expire the cache contents, in seconds.
 *                       Default 0 (no expiration).
 * @return bool[] Array of return values, grouped by key. Each value is either
 *                true on success, or false on failure.
 */
function wp_cache_set_multiple(array $data, $group = '', $expire = 0)
{
	global $wp_object_cache;

	return $wp_object_cache->set_multiple($data, $group, $expire);
}

/**
 * Retrieves the cache contents from the cache by key and group.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::get()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key   The key under which the cache contents are stored.
 * @param string     $group Optional. Where the cache contents are grouped. Default empty.
 * @param bool       $force Optional. Whether to force an update of the local cache
 *                          from the persistent cache. Default false.
 * @param bool       $found Optional. Whether the key was found in the cache (passed by reference).
 *                          Disambiguates a return of false, a storable value. Default null.
 * @return mixed|false The cache contents on success, false on failure to retrieve contents.
 */
function wp_cache_get($key, $group = '', $force = false, &$found = null)
{
	global $wp_object_cache;

	return $wp_object_cache->get($key, $group, $force, $found);
}

/**
 * Retrieves multiple values from the cache in one call.
 *
 * @since 5.4
 *
 * @see WP_Object_Cache::get_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $keys  Array of keys under which the cache contents are stored.
 * @param string $group Optional. Where the cache contents are grouped. Default empty.
 * @param bool   $force Optional. Whether to force an update of the local cache
 *                      from the persistent cache. Default false.
 * @return array Array of return values, grouped by key. Each value is either
 *               the cache contents on success, or false on failure.
 */
function wp_cache_get_multiple($keys, $group = '', $force = false)
{
	global $wp_object_cache;

	return $wp_object_cache->get_multiple($keys, $group, $force);
}

/**
 * Removes the cache contents matching key and group.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::delete()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key   What the contents in the cache are called.
 * @param string     $group Optional. Where the cache contents are grouped. Default empty.
 * @return bool True on successful removal, false on failure.
 */
function wp_cache_delete($key, $group = '')
{
	global $wp_object_cache;

	return $wp_object_cache->delete($key, $group);
}

/**
 * Deletes multiple values from the cache in one call.
 *
 * @since 5.4
 *
 * @see WP_Object_Cache::delete_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $keys  Array of keys under which the cache to deleted.
 * @param string $group Optional. Where the cache contents are grouped. Default empty.
 * @return bool[] Array of return values, grouped by key. Each value is either
 *                true on success, or false if the contents were not deleted.
 */
function wp_cache_delete_multiple(array $keys, $group = '')
{
	global $wp_object_cache;

	return $wp_object_cache->delete_multiple($keys, $group);
}

/**
 * Increments numeric cache item's value.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::incr()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The key for the cache contents that should be incremented.
 * @param int        $offset Optional. The amount by which to increment the item's value.
 *                           Default 1.
 * @param string     $group  Optional. The group the key is in. Default empty.
 * @return int|false The item's new value on success, false on failure.
 */
function wp_cache_incr($key, $offset = 1, $group = '')
{
	global $wp_object_cache;

	return $wp_object_cache->incr($key, $offset, $group);
}

/**
 * Decrements numeric cache item's value.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::decr()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The cache key to decrement.
 * @param int        $offset Optional. The amount by which to decrement the item's value.
 *                           Default 1.
 * @param string     $group  Optional. The group the key is in. Default empty.
 * @return int|false The item's new value on success, false on failure.
 */
function wp_cache_decr($key, $offset = 1, $group = '')
{
	global $wp_object_cache;

	return $wp_object_cache->decr($key, $offset, $group);
}

/**
 * Removes all cache items.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::flush()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @return bool True on success, false on failure.
 */
function wp_cache_flush()
{
	global $wp_object_cache;

	return $wp_object_cache->flush();
}

/**
 * Removes all cache items from the in-memory runtime cache.
 *
 * @since 5.4
 *
 * @see WP_Object_Cache::flush_runtime()
 *
 * @return bool True on success, false on failure.
 */
function wp_cache_flush_runtime()
{
	global $wp_object_cache;

	return $wp_object_cache->flush_runtime();
}

/**
 * Removes all cache items in a group, if the object cache implementation supports it.
 *
 * Before calling this function, always check for group flushing support using the
 * `wp_cache_supports( 'flush_group' )` function.
 *
 * @since 5.4
 *
 * @see WP_Object_Cache::flush_group()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param string $group Name of group to remove from cache.
 * @return bool True if group was flushed, false otherwise.
 */
function wp_cache_flush_group($group)
{
	global $wp_object_cache;

	return $wp_object_cache->flush_group($group);
}

/**
 * Determines whether the object cache implementation supports a particular feature.
 *
 * @since 5.4
 *
 * @param string $feature Name of the feature to check for. Possible values include:
 *                        'add_multiple', 'set_multiple', 'get_multiple', 'delete_multiple',
 *                        'flush_runtime', 'flush_group'.
 * @return bool True if the feature is supported, false otherwise.
 */
function wp_cache_supports($feature)
{
	switch ($feature) {
		case 'add_multiple':
		case 'set_multiple':
		case 'get_multiple':
		case 'delete_multiple':
		case 'flush_runtime':
			return true;

		case 'flush_group':
		default:
			return false;
	}
}

/**
 * Closes the cache.
 *
 * This function has ceased to do anything since WordPress 2.5. The
 * functionality was removed along with the rest of the persistent cache.
 *
 * This does not mean that plugins can't implement this function when they need
 * to make sure that the cache is cleaned up after WordPress no longer needs it.
 *
 * @since 1.8
 *
 * @return true Always returns true.
 */
function wp_cache_close()
{
	return true;
}

/**
 * Adds a group or set of groups to the list of global groups.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::add_global_groups()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param string|string[] $groups A group or an array of groups to add.
 */
function wp_cache_add_global_groups($groups)
{
	global $wp_object_cache;

	$wp_object_cache->add_global_groups($groups);
}

/**
 * Adds a group or set of groups to the list of non-persistent groups.
 *
 * @since 1.8
 *
 * @param string|string[] $groups A group or an array of groups to add.
 */
function wp_cache_add_non_persistent_groups($groups)
{
	global $wp_object_cache;

	$wp_object_cache->add_non_persistent_groups($groups);
}

/**
 * Switches the internal blog ID.
 *
 * This changes the blog id used to create keys in blog specific groups.
 *
 * @since 1.8
 *
 * @see WP_Object_Cache::switch_to_blog()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int $blog_id Site ID.
 */
function wp_cache_switch_to_blog($blog_id)
{
	global $wp_object_cache;

	$wp_object_cache->switch_to_blog($blog_id);
}

class WP_Object_Cache
{
	protected static $_instance;

	private $_object_cache;

	private $_cache = array();
	private $_cache_404 = array();

	private $cache_total = 0;
	private $count_hit_incall = 0;
	private $count_hit = 0;
	private $count_miss_incall = 0;
	private $count_miss = 0;
	private $count_set = 0;

	protected $global_groups = array();
	private $blog_prefix;
	private $multisite;

	/**
	 * Init.
	 *
	 * @since  1.8
	 */
	public function __construct()
	{
		$this->_object_cache = \LiteSpeed\Object_Cache::cls();

		$this->multisite = is_multisite();
		$this->blog_prefix = $this->multisite ? get_current_blog_id() . ':' : '';

		/**
		 * Fix multiple instance using same oc issue
		 * @since  1.8.2
		 */
		!defined('LSOC_PREFIX') && define('LSOC_PREFIX', substr(md5(__FILE__), -5));
	}

	/**
	 * Makes private properties readable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name Property to get.
	 * @return mixed Property.
	 */
	public function __get($name)
	{
		return $this->$name;
	}

	/**
	 * Makes private properties settable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name  Property to set.
	 * @param mixed  $value Property value.
	 * @return mixed Newly-set property.
	 */
	public function __set($name, $value)
	{
		return $this->$name = $value;
	}

	/**
	 * Makes private properties checkable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name Property to check if set.
	 * @return bool Whether the property is set.
	 */
	public function __isset($name)
	{
		return isset($this->$name);
	}

	/**
	 * Makes private properties un-settable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name Property to unset.
	 */
	public function __unset($name)
	{
		unset($this->$name);
	}

	/**
	 * Serves as a utility function to determine whether a key is valid.
	 *
	 * @since 5.4
	 * @access protected
	 *
	 * @param int|string $key Cache key to check for validity.
	 * @return bool Whether the key is valid.
	 */
	protected function is_valid_key($key)
	{
		if (is_int($key)) {
			return true;
		}

		if (is_string($key) && trim($key) !== '') {
			return true;
		}

		$type = gettype($key);

		if (!function_exists('__')) {
			wp_load_translations_early();
		}

		$message = is_string($key)
			? __('Cache key must not be an empty string.')
			: /* translators: %s: The type of the given cache key. */
			sprintf(__('Cache key must be integer or non-empty string, %s given.'), $type);

		_doing_it_wrong(sprintf('%s::%s', __CLASS__, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function']), $message, '6.1.0');

		return false;
	}

	/**
	 * Get the final key.
	 *
	 * @since 1.8
	 * @access private
	 */
	private function _key($key, $group = 'default')
	{
		if (empty($group)) {
			$group = 'default';
		}

		$prefix = $this->_object_cache->is_global($group) ? '' : $this->blog_prefix;

		return LSOC_PREFIX . $prefix . $group . '.' . $key;
	}

	/**
	 * Output debug info.
	 *
	 * @since  1.8
	 * @access public
	 */
	public function debug()
	{
		return ' [total] ' .
			$this->cache_total .
			' [hit_incall] ' .
			$this->count_hit_incall .
			' [hit] ' .
			$this->count_hit .
			' [miss_incall] ' .
			$this->count_miss_incall .
			' [miss] ' .
			$this->count_miss .
			' [set] ' .
			$this->count_set;
	}

	/**
	 * Adds data to the cache if it doesn't already exist.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @uses WP_Object_Cache::_exists() Checks to see if the cache already has data.
	 * @uses WP_Object_Cache::set()     Sets the data after the checking the cache
	 *                                  contents existence.
	 *
	 * @param int|string $key    What to call the contents in the cache.
	 * @param mixed      $data   The contents to store in the cache.
	 * @param string     $group  Optional. Where to group the cache contents. Default 'default'.
	 * @param int        $expire Optional. When to expire the cache contents, in seconds.
	 *                           Default 0 (no expiration).
	 * @return bool True on success, false if cache key and group already exist.
	 */
	public function add($key, $data, $group = 'default', $expire = 0)
	{
		if (wp_suspend_cache_addition()) {
			return false;
		}

		if (!$this->is_valid_key($key)) {
			return false;
		}

		if (empty($group)) {
			$group = 'default';
		}

		$id = $this->_key($key, $group);

		if (array_key_exists($id, $this->_cache)) {
			return false;
		}

		return $this->set($key, $data, $group, (int) $expire);
	}

	/**
	 * Adds multiple values to the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $data   Array of keys and values to be added.
	 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
	 * @param int    $expire Optional. When to expire the cache contents, in seconds.
	 *                       Default 0 (no expiration).
	 * @return bool[] Array of return values, grouped by key. Each value is either
	 *                true on success, or false if cache key and group already exist.
	 */
	public function add_multiple(array $data, $group = '', $expire = 0)
	{
		$values = array();

		foreach ($data as $key => $value) {
			$values[$key] = $this->add($key, $value, $group, $expire);
		}

		return $values;
	}

	/**
	 * Replaces the contents in the cache, if contents already exist.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @see WP_Object_Cache::set()
	 *
	 * @param int|string $key    What to call the contents in the cache.
	 * @param mixed      $data   The contents to store in the cache.
	 * @param string     $group  Optional. Where to group the cache contents. Default 'default'.
	 * @param int        $expire Optional. When to expire the cache contents, in seconds.
	 *                           Default 0 (no expiration).
	 * @return bool True if contents were replaced, false if original value does not exist.
	 */
	public function replace($key, $data, $group = 'default', $expire = 0)
	{
		if (!$this->is_valid_key($key)) {
			return false;
		}

		if (empty($group)) {
			$group = 'default';
		}

		$id = $this->_key($key, $group);

		if (!array_key_exists($id, $this->_cache)) {
			return false;
		}

		return $this->set($key, $data, $group, (int) $expire);
	}

	/**
	 * Sets the data contents into the cache.
	 *
	 * The cache contents are grouped by the $group parameter followed by the
	 * $key. This allows for duplicate IDs in unique groups. Therefore, naming of
	 * the group should be used with care and should follow normal function
	 * naming guidelines outside of core WordPress usage.
	 *
	 * The $expire parameter is not used, because the cache will automatically
	 * expire for each time a page is accessed and PHP finishes. The method is
	 * more for cache plugins which use files.
	 *
	 * @since 1.8
	 * @since 5.4 Returns false if cache key is invalid.
	 * @access public
	 *
	 * @param int|string $key    What to call the contents in the cache.
	 * @param mixed      $data   The contents to store in the cache.
	 * @param string     $group  Optional. Where to group the cache contents. Default 'default'.
	 * @param int        $expire Optional. When to expire the cache contents, in seconds.
	 *                           Default 0 (no expiration).
	 * @return bool True if contents were set, false if key is invalid.
	 */
	public function set($key, $data, $group = 'default', $expire = 0)
	{
		if (!$this->is_valid_key($key)) {
			return false;
		}

		if (empty($group)) {
			$group = 'default';
		}

		$id = $this->_key($key, $group);

		if (is_object($data)) {
			$data = clone $data;
		}
		// error_log("oc: set \t\t\t[key] " . $id );
		$this->_cache[$id] = $data;

		if (array_key_exists($id, $this->_cache_404)) {
			// error_log("oc: unset404\t\t\t[key] " . $id );
			unset($this->_cache_404[$id]);
		}

		if (!$this->_object_cache->is_non_persistent($group)) {
			$this->_object_cache->set($id, serialize(array('data' => $data)), (int) $expire);
			$this->count_set++;
		}

		if ($this->_object_cache->store_transients($group)) {
			$this->_transient_set($key, $data, $group, (int) $expire);
		}

		return true;
	}

	/**
	 * Sets multiple values to the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $data   Array of key and value to be set.
	 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
	 * @param int    $expire Optional. When to expire the cache contents, in seconds.
	 *                       Default 0 (no expiration).
	 * @return bool[] Array of return values, grouped by key. Each value is always true.
	 */
	public function set_multiple(array $data, $group = '', $expire = 0)
	{
		$values = array();

		foreach ($data as $key => $value) {
			$values[$key] = $this->set($key, $value, $group, $expire);
		}

		return $values;
	}

	/**
	 * Retrieves the cache contents, if it exists.
	 *
	 * The contents will be first attempted to be retrieved by searching by the
	 * key in the cache group. If the cache is hit (success) then the contents
	 * are returned.
	 *
	 * On failure, the number of cache misses will be incremented.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int|string $key   The key under which the cache contents are stored.
	 * @param string     $group Optional. Where the cache contents are grouped. Default 'default'.
	 * @param bool       $force Optional. Unused. Whether to force an update of the local cache
	 *                          from the persistent cache. Default false.
	 * @param bool       $found Optional. Whether the key was found in the cache (passed by reference).
	 *                          Disambiguates a return of false, a storable value. Default null.
	 * @return mixed|false The cache contents on success, false on failure to retrieve contents.
	 */
	public function get($key, $group = 'default', $force = false, &$found = null)
	{
		if (!$this->is_valid_key($key)) {
			return false;
		}

		if (empty($group)) {
			$group = 'default';
		}

		$id = $this->_key($key, $group);

		// error_log('');
		// error_log("oc: get \t\t\t[key] " . $id . ( $force ? "\t\t\t [forced] " : '' ) );
		$found = false;
		$found_in_oc = false;
		$cache_val = false;
		if (array_key_exists($id, $this->_cache) && !$force) {
			$found = true;
			$cache_val = $this->_cache[$id];
			$this->count_hit_incall++;
		} elseif (!array_key_exists($id, $this->_cache_404) && !$this->_object_cache->is_non_persistent($group)) {
			$v = $this->_object_cache->get($id);

			if ($v !== null) {
				$v = @maybe_unserialize($v);
			}

			// To be compatible with false val
			if (is_array($v) && array_key_exists('data', $v)) {
				$this->count_hit++;
				$found = true;
				$found_in_oc = true;
				$cache_val = $v['data'];
			} else {
				// Can't find key, cache it to 404
				// error_log("oc: add404\t\t\t[key] " . $id );
				$this->_cache_404[$id] = 1;
				$this->count_miss++;
			}
		} else {
			$this->count_miss_incall++;
		}

		if (is_object($cache_val)) {
			$cache_val = clone $cache_val;
		}

		// If not found but has `Store Transients` cfg on, still need to follow WP's get_transient() logic
		if (!$found && $this->_object_cache->store_transients($group)) {
			$cache_val = $this->_transient_get($key, $group);
			if ($cache_val) {
				$found = true; // $found not used for now (v1.8.3)
			}
		}

		if ($found_in_oc) {
			$this->_cache[$id] = $cache_val;
		}

		$this->cache_total++;

		return $cache_val;
	}

	/**
	 * Retrieves multiple values from the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $keys  Array of keys under which the cache contents are stored.
	 * @param string $group Optional. Where the cache contents are grouped. Default 'default'.
	 * @param bool   $force Optional. Whether to force an update of the local cache
	 *                      from the persistent cache. Default false.
	 * @return array Array of return values, grouped by key. Each value is either
	 *               the cache contents on success, or false on failure.
	 */
	public function get_multiple($keys, $group = 'default', $force = false)
	{
		$values = array();

		foreach ($keys as $key) {
			$values[$key] = $this->get($key, $group, $force);
		}

		return $values;
	}

	/**
	 * Removes the contents of the cache key in the group.
	 *
	 * If the cache key does not exist in the group, then nothing will happen.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int|string $key        What the contents in the cache are called.
	 * @param string     $group      Optional. Where the cache contents are grouped. Default 'default'.
	 * @param bool       $deprecated Optional. Unused. Default false.
	 * @return bool True on success, false if the contents were not deleted.
	 */
	public function delete($key, $group = 'default', $deprecated = false)
	{
		if (!$this->is_valid_key($key)) {
			return false;
		}

		if (empty($group)) {
			$group = 'default';
		}

		$id = $this->_key($key, $group);

		if ($this->_object_cache->store_transients($group)) {
			$this->_transient_del($key, $group);
		}

		if (array_key_exists($id, $this->_cache)) {
			unset($this->_cache[$id]);
		}
		// error_log("oc: delete \t\t\t[key] " . $id );

		if ($this->_object_cache->is_non_persistent($group)) {
			return false;
		}

		return $this->_object_cache->delete($id);
	}

	/**
	 * Deletes multiple values from the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $keys  Array of keys to be deleted.
	 * @param string $group Optional. Where the cache contents are grouped. Default empty.
	 * @return bool[] Array of return values, grouped by key. Each value is either
	 *                true on success, or false if the contents were not deleted.
	 */
	public function delete_multiple(array $keys, $group = '')
	{
		$values = array();

		foreach ($keys as $key) {
			$values[$key] = $this->delete($key, $group);
		}

		return $values;
	}

	/**
	 * Increments numeric cache item's value.
	 *
	 * @since 5.4
	 *
	 * @param int|string $key    The cache key to increment.
	 * @param int        $offset Optional. The amount by which to increment the item's value.
	 *                           Default 1.
	 * @param string     $group  Optional. The group the key is in. Default 'default'.
	 * @return int|false The item's new value on success, false on failure.
	 */
	public function incr($key, $offset = 1, $group = 'default')
	{
		return $this->incr_desr($key, $offset, $group, true);
	}

	/**
	 * Decrements numeric cache item's value.
	 *
	 * @since 5.4
	 *
	 * @param int|string $key    The cache key to decrement.
	 * @param int        $offset Optional. The amount by which to decrement the item's value.
	 *                           Default 1.
	 * @param string     $group  Optional. The group the key is in. Default 'default'.
	 * @return int|false The item's new value on success, false on failure.
	 */
	public function decr($key, $offset = 1, $group = 'default')
	{
		return $this->incr_desr($key, $offset, $group, false);
	}

	/**
	 * Increments or decrements numeric cache item's value.
	 *
	 * @since 1.8
	 * @access public
	 */
	public function incr_desr($key, $offset = 1, $group = 'default', $incr = true)
	{
		if (!$this->is_valid_key($key)) {
			return false;
		}

		if (empty($group)) {
			$group = 'default';
		}

		$cache_val = $this->get($key, $group);

		if (false === $cache_val) {
			return false;
		}

		if (!is_numeric($cache_val)) {
			$cache_val = 0;
		}

		$offset = (int) $offset;

		if ($incr) {
			$cache_val += $offset;
		} else {
			$cache_val -= $offset;
		}

		if ($cache_val < 0) {
			$cache_val = 0;
		}

		$this->set($key, $cache_val, $group);

		return $cache_val;
	}

	/**
	 * Clears the object cache of all data.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @return true Always returns true.
	 */
	public function flush()
	{
		$this->flush_runtime();

		$this->_object_cache->flush();

		return true;
	}

	/**
	 * Removes all cache items from the in-memory runtime cache.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @return true Always returns true.
	 */
	public function flush_runtime()
	{
		$this->_cache = array();
		$this->_cache_404 = array();

		return true;
	}

	/**
	 * Removes all cache items in a group.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $group Name of group to remove from cache.
	 * @return true Always returns true.
	 */
	public function flush_group($group)
	{
		// unset( $this->cache[ $group ] );

		return true;
	}

	/**
	 * Sets the list of global cache groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string|string[] $groups List of groups that are global.
	 */
	public function add_global_groups($groups)
	{
		$groups = (array) $groups;

		$this->_object_cache->add_global_groups($groups);
	}

	/**
	 * Sets the list of non-persistent cache groups.
	 *
	 * @since 1.8
	 * @access public
	 */
	public function add_non_persistent_groups($groups)
	{
		$groups = (array) $groups;

		$this->_object_cache->add_non_persistent_groups($groups);
	}

	/**
	 * Switches the internal blog ID.
	 *
	 * This changes the blog ID used to create keys in blog specific groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int $blog_id Blog ID.
	 */
	public function switch_to_blog($blog_id)
	{
		$blog_id = (int) $blog_id;
		$this->blog_prefix = $this->multisite ? $blog_id . ':' : '';
	}

	/**
	 * Get transient from wp table
	 *
	 * @since 1.8.3
	 * @access private
	 * @see `wp-includes/option.php` function `get_transient`/`set_site_transient`
	 */
	private function _transient_get($transient, $group)
	{
		if ($group == 'transient') {
			/**** Ori WP func start ****/
			$transient_option = '_transient_' . $transient;
			if (!wp_installing()) {
				// If option is not in alloptions, it is not autoloaded and thus has a timeout
				$alloptions = wp_load_alloptions();
				if (!isset($alloptions[$transient_option])) {
					$transient_timeout = '_transient_timeout_' . $transient;
					$timeout = get_option($transient_timeout);
					if (false !== $timeout && $timeout < time()) {
						delete_option($transient_option);
						delete_option($transient_timeout);
						$value = false;
					}
				}
			}

			if (!isset($value)) {
				$value = get_option($transient_option);
			}
			/**** Ori WP func end ****/
		} elseif ($group == 'site-transient') {
			/**** Ori WP func start ****/
			$no_timeout = array('update_core', 'update_plugins', 'update_themes');
			$transient_option = '_site_transient_' . $transient;
			if (!in_array($transient, $no_timeout)) {
				$transient_timeout = '_site_transient_timeout_' . $transient;
				$timeout = get_site_option($transient_timeout);
				if (false !== $timeout && $timeout < time()) {
					delete_site_option($transient_option);
					delete_site_option($transient_timeout);
					$value = false;
				}
			}

			if (!isset($value)) {
				$value = get_site_option($transient_option);
			}
			/**** Ori WP func end ****/
		} else {
			$value = false;
		}

		return $value;
	}

	/**
	 * Set transient to WP table
	 *
	 * @since 1.8.3
	 * @access private
	 * @see `wp-includes/option.php` function `set_transient`/`set_site_transient`
	 */
	private function _transient_set($transient, $value, $group, $expiration)
	{
		if ($group == 'transient') {
			/**** Ori WP func start ****/
			$transient_timeout = '_transient_timeout_' . $transient;
			$transient_option = '_transient_' . $transient;
			if (false === get_option($transient_option)) {
				$autoload = 'yes';
				if ((int) $expiration) {
					$autoload = 'no';
					add_option($transient_timeout, time() + (int) $expiration, '', 'no');
				}
				$result = add_option($transient_option, $value, '', $autoload);
			} else {
				// If expiration is requested, but the transient has no timeout option,
				// delete, then re-create transient rather than update.
				$update = true;
				if ((int) $expiration) {
					if (false === get_option($transient_timeout)) {
						delete_option($transient_option);
						add_option($transient_timeout, time() + (int) $expiration, '', 'no');
						$result = add_option($transient_option, $value, '', 'no');
						$update = false;
					} else {
						update_option($transient_timeout, time() + (int) $expiration);
					}
				}
				if ($update) {
					$result = update_option($transient_option, $value);
				}
			}
			/**** Ori WP func end ****/
		} elseif ($group == 'site-transient') {
			/**** Ori WP func start ****/
			$transient_timeout = '_site_transient_timeout_' . $transient;
			$option = '_site_transient_' . $transient;
			if (false === get_site_option($option)) {
				if ((int) $expiration) {
					add_site_option($transient_timeout, time() + (int) $expiration);
				}
				$result = add_site_option($option, $value);
			} else {
				if ((int) $expiration) {
					update_site_option($transient_timeout, time() + (int) $expiration);
				}
				$result = update_site_option($option, $value);
			}
			/**** Ori WP func end ****/
		} else {
			$result = null;
		}

		return $result;
	}

	/**
	 * Delete transient from WP table
	 *
	 * @since 1.8.3
	 * @access private
	 * @see `wp-includes/option.php` function `delete_transient`/`delete_site_transient`
	 */
	private function _transient_del($transient, $group)
	{
		if ($group == 'transient') {
			/**** Ori WP func start ****/
			$option_timeout = '_transient_timeout_' . $transient;
			$option = '_transient_' . $transient;
			$result = delete_option($option);
			if ($result) {
				delete_option($option_timeout);
			}
			/**** Ori WP func end ****/
		} elseif ($group == 'site-transient') {
			/**** Ori WP func start ****/
			$option_timeout = '_site_transient_timeout_' . $transient;
			$option = '_site_transient_' . $transient;
			$result = delete_site_option($option);
			if ($result) {
				delete_site_option($option_timeout);
			}
			/**** Ori WP func end ****/
		}
	}

	/**
	 * Get the current instance object.
	 *
	 * @since 1.8
	 * @access public
	 */
	public static function get_instance()
	{
		if (!isset(self::$_instance)) {
			self::$_instance = new self();
		}

		return self::$_instance;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit