1
0
mirror of https://github.com/mrclay/minify.git synced 2025-08-20 21:02:30 +02:00

Minify_Cache_APCu replaces APC

This commit is contained in:
Christoph Rönsch
2022-10-01 22:23:52 +02:00
parent 5112bb50f4
commit 455084b284
4 changed files with 163 additions and 1 deletions

View File

@@ -13,6 +13,8 @@
*
* @package Minify
* @author Chris Edwards
*
* @deprecated Use Minify_Cache_APCu
**/
class Minify_Cache_APC implements Minify_CacheInterface
{

136
lib/Minify/Cache/APCu.php Normal file
View File

@@ -0,0 +1,136 @@
<?php
/**
* Class Minify_Cache_APCu
* @package Minify
*/
/**
* APCu-based cache class for Minify
*
* <code>
* Minify::setCache(new Minify_Cache_APCu());
* </code>
*
* @package Minify
* @author Chris Edwards
**/
class Minify_Cache_APCu implements Minify_CacheInterface
{
/**
* Create a Minify_Cache_APCu object, to be passed to
* Minify::setCache().
*
*
* @param int $expire seconds until expiration (default = 0
* meaning the item will not get an expiration date)
*
* @return null
*/
public function __construct($expire = 0)
{
$this->_exp = $expire;
}
/**
* Write data to cache.
*
* @param string $id cache id
*
* @param string $data
*
* @return bool success
*/
public function store($id, $data)
{
return apcu_store($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 apcu, store in instance
*
* @param string $id
*
* @return bool success
*/
private function _fetch($id)
{
if ($this->_id === $id) {
return true;
}
$ret = apcu_fetch($id);
if (false === $ret) {
$this->_id = null;
return false;
}
list($this->_lm, $this->_data) = explode('|', $ret, 2);
$this->_id = $id;
return true;
}
}