mirror of
https://github.com/mrclay/minify.git
synced 2025-09-05 19:52:53 +02:00
Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
dc02cdfba7 | ||
|
23f055d3f5 | ||
|
4970127e91 | ||
|
39c37bdd8c | ||
|
4a9d0595e3 | ||
|
ca8fdc6fdd | ||
|
8c69866874 | ||
|
ae5b9f0bfb | ||
|
e74adc4f6b | ||
|
5dee6538be | ||
|
455084b284 | ||
|
5112bb50f4 | ||
|
b314554a0f | ||
|
9dac0ac873 |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [3.0.14] - 2023-05-05
|
||||
|
||||
- Support monolog v3, [#705]
|
||||
- Allow invalidation from manual invocation, [#700]
|
||||
- Add property declaration, [#699]
|
||||
|
||||
[3.0.14]: https://github.com/mrclay/minify/compare/3.0.13...3.0.14
|
||||
[#705]: https://github.com/mrclay/minify/pull/705
|
||||
[#700]: https://github.com/mrclay/minify/pull/700
|
||||
[#699]: https://github.com/mrclay/minify/pull/699
|
||||
|
||||
## [3.0.13] - 2022-10-03
|
||||
|
||||
- Add `Minify_Cache_APCu` to replace `Minify_Cache_APC`, [#697]
|
||||
- Require `marcusschwarz/lesserphp:^0.5.5` to fix php 7.4 compatibility, [#688]
|
||||
|
||||
[3.0.13]: https://github.com/mrclay/minify/compare/3.0.12...3.0.13
|
||||
[#697]: https://github.com/mrclay/minify/pull/697
|
||||
[#688]: https://github.com/mrclay/minify/pull/688
|
||||
|
||||
## [3.0.12] - 2022-05-14
|
||||
|
||||
- Update jquery to 1.12.4 to avoid xss attacks, [#692]
|
||||
|
@@ -32,8 +32,8 @@
|
||||
"php": "^5.3.0 || ^7.0 || ^8.0",
|
||||
"ext-pcre": "*",
|
||||
"intervention/httpauth": "^2.0|^3.0",
|
||||
"marcusschwarz/lesserphp": "^0.5.1",
|
||||
"monolog/monolog": "~1.1|~2.0",
|
||||
"marcusschwarz/lesserphp": "^0.5.5",
|
||||
"monolog/monolog": "~1.1|~2.0|~3.0",
|
||||
"mrclay/jsmin-php": "~2",
|
||||
"mrclay/props-dic": "^2.2|^3.0",
|
||||
"tubalmartin/cssmin": "~4"
|
||||
|
@@ -118,6 +118,7 @@ class Minify
|
||||
'quiet' => false, // serve() will send headers and output
|
||||
'debug' => false,
|
||||
'concatOnly' => false,
|
||||
'invalidate' => false,
|
||||
|
||||
// if you override these, the response codes MUST be directly after
|
||||
// the first space.
|
||||
@@ -284,6 +285,7 @@ class Minify
|
||||
'lastModifiedTime' => $this->options['lastModifiedTime'],
|
||||
'isPublic' => $this->options['isPublic'],
|
||||
'encoding' => $this->options['encodeMethod'],
|
||||
'invalidate' => $this->options['invalidate'],
|
||||
);
|
||||
|
||||
if ($this->options['maxAge'] > 0) {
|
||||
|
@@ -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
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;
|
||||
}
|
||||
}
|
@@ -22,6 +22,11 @@ class Minify_HTML
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_jsCleanComments = true;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $_html;
|
||||
|
||||
/**
|
||||
* "Minify" an HTML page
|
||||
|
@@ -4,10 +4,6 @@ namespace Minify\Test;
|
||||
|
||||
use Minify_HTML_Helper;
|
||||
|
||||
/**
|
||||
* @requires php < 7.3
|
||||
* @see https://github.com/mrclay/minify/pull/685
|
||||
*/
|
||||
class LessSourceTest extends TestCase
|
||||
{
|
||||
public function setUp()
|
||||
|
@@ -9,7 +9,6 @@ class MinifyCacheAPCTest extends TestCase
|
||||
public function setUp()
|
||||
{
|
||||
if (!function_exists('apc_store')) {
|
||||
// FIXME: is APCu extension ok too?
|
||||
$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