mirror of
https://github.com/mrclay/minify.git
synced 2025-08-22 05:33:14 +02:00
Minify_Cache_APCu replaces APC
This commit is contained in:
@@ -13,6 +13,8 @@
|
|||||||
*
|
*
|
||||||
* @package Minify
|
* @package Minify
|
||||||
* @author Chris Edwards
|
* @author Chris Edwards
|
||||||
|
*
|
||||||
|
* @deprecated Use Minify_Cache_APCu
|
||||||
**/
|
**/
|
||||||
class Minify_Cache_APC implements Minify_CacheInterface
|
class Minify_Cache_APC implements Minify_CacheInterface
|
||||||
{
|
{
|
||||||
|
136
lib/Minify/Cache/APCu.php
Normal file
136
lib/Minify/Cache/APCu.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
@@ -9,7 +9,6 @@ class MinifyCacheAPCTest extends TestCase
|
|||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
if (!function_exists('apc_store')) {
|
if (!function_exists('apc_store')) {
|
||||||
// FIXME: is APCu extension ok too?
|
|
||||||
$this->markTestSkipped("To test this component, install APC extension");
|
$this->markTestSkipped("To test this component, install APC extension");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
tests/MinifyCacheAPCuTest.php
Normal file
25
tests/MinifyCacheAPCuTest.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Minify\Test;
|
||||||
|
|
||||||
|
use Minify_Cache_APCu;
|
||||||
|
|
||||||
|
class MinifyCacheAPCuTest extends TestCase
|
||||||
|
{
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
if (!function_exists('apcu_store')) {
|
||||||
|
$this->markTestSkipped("To test this component, install APCu extension");
|
||||||
|
}
|
||||||
|
ini_set('apc.enable_cli', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test1()
|
||||||
|
{
|
||||||
|
$data = str_repeat(md5(time()) . 'í', 100); // 3400 bytes in UTF-8
|
||||||
|
$id = 'Minify_test_cache';
|
||||||
|
|
||||||
|
$cache = new Minify_Cache_APCu();
|
||||||
|
$this->assertTestCache($cache, $id, $data);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user