是否可以将 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).

希望对您有所帮助!