是否可以将 redis 或替代缓存与 HTMLPurifier 一起使用?
Is it possible to use redis or an alternative cache with HTMLPurifier?
使用 HTML Purifier (ezyang/htmlpurifier) 或专门针对 Laravel 7 (stevebauman/purify)(由前者提供支持),是否可以使用替代缓存而不是文件系统?
docs 暗示您可以使用 FS,或 null(不推荐),但也表明 FS 只是一种实现。其他实现是否可行(最好是 Redis),它们将如何配置?
目前有 no official caches in the HTML Purifier library other than "Serializer"。也就是说,您可以编写自己的 HTMLPurifier_DefinitionCache
.
扩展名
为了能够加载自定义缓存,您必须 register 使用 DefinitionCacheFactory
实现。据我了解,这应该有效:
...
$factory = HTMLPurifier_DefinitionCacheFactory::instance();
$factory->register('YourImplName', 'YourFullClassName');
$config->set('Cache.DefinitionImpl', 'YourImplName');
...
您可以在 DefinitionCache.php
中查看需要实现的方法,您需要扩展这些方法 (class YourFullClassName extends HTMLPurifier_DefinitionCache
)。本着不让大部分答案只能在 link 中访问的精神,这里是您绝对必须实现的 class 的抽象方法:
/**
* Adds a definition object to the cache
* @param HTMLPurifier_Definition $def
* @param HTMLPurifier_Config $config
*/
abstract public function add($def, $config);
/**
* Unconditionally saves a definition object to the cache
* @param HTMLPurifier_Definition $def
* @param HTMLPurifier_Config $config
*/
abstract public function set($def, $config);
/**
* Replace an object in the cache
* @param HTMLPurifier_Definition $def
* @param HTMLPurifier_Config $config
*/
abstract public function replace($def, $config);
/**
* Retrieves a definition object from the cache
* @param HTMLPurifier_Config $config
*/
abstract public function get($config);
/**
* Removes a definition object to the cache
* @param HTMLPurifier_Config $config
*/
abstract public function remove($config);
/**
* Clears all objects from cache
* @param HTMLPurifier_Config $config
*/
abstract public function flush($config);
/**
* Clears all expired (older version or revision) objects from cache
* @note Be careful implementing this method as flush. Flush must
* not interfere with other Definition types, and cleanup()
* should not be repeatedly called by userland code.
* @param HTMLPurifier_Config $config
*/
abstract public function cleanup($config);
class 中还有一些其他方法,如果您发现需要覆盖它们,您可以覆盖它们,例如generateKey($config)
或 isOld($key, $config)
.
希望对您有所帮助!
使用 HTML Purifier (ezyang/htmlpurifier) 或专门针对 Laravel 7 (stevebauman/purify)(由前者提供支持),是否可以使用替代缓存而不是文件系统?
docs 暗示您可以使用 FS,或 null(不推荐),但也表明 FS 只是一种实现。其他实现是否可行(最好是 Redis),它们将如何配置?
目前有 no official caches in the HTML Purifier library other than "Serializer"。也就是说,您可以编写自己的 HTMLPurifier_DefinitionCache
.
为了能够加载自定义缓存,您必须 register 使用 DefinitionCacheFactory
实现。据我了解,这应该有效:
...
$factory = HTMLPurifier_DefinitionCacheFactory::instance();
$factory->register('YourImplName', 'YourFullClassName');
$config->set('Cache.DefinitionImpl', 'YourImplName');
...
您可以在 DefinitionCache.php
中查看需要实现的方法,您需要扩展这些方法 (class YourFullClassName extends HTMLPurifier_DefinitionCache
)。本着不让大部分答案只能在 link 中访问的精神,这里是您绝对必须实现的 class 的抽象方法:
/**
* Adds a definition object to the cache
* @param HTMLPurifier_Definition $def
* @param HTMLPurifier_Config $config
*/
abstract public function add($def, $config);
/**
* Unconditionally saves a definition object to the cache
* @param HTMLPurifier_Definition $def
* @param HTMLPurifier_Config $config
*/
abstract public function set($def, $config);
/**
* Replace an object in the cache
* @param HTMLPurifier_Definition $def
* @param HTMLPurifier_Config $config
*/
abstract public function replace($def, $config);
/**
* Retrieves a definition object from the cache
* @param HTMLPurifier_Config $config
*/
abstract public function get($config);
/**
* Removes a definition object to the cache
* @param HTMLPurifier_Config $config
*/
abstract public function remove($config);
/**
* Clears all objects from cache
* @param HTMLPurifier_Config $config
*/
abstract public function flush($config);
/**
* Clears all expired (older version or revision) objects from cache
* @note Be careful implementing this method as flush. Flush must
* not interfere with other Definition types, and cleanup()
* should not be repeatedly called by userland code.
* @param HTMLPurifier_Config $config
*/
abstract public function cleanup($config);
class 中还有一些其他方法,如果您发现需要覆盖它们,您可以覆盖它们,例如generateKey($config)
或 isOld($key, $config)
.
希望对您有所帮助!