【问题标题】:Is it possible to use redis or an alternative cache with HTMLPurifier?是否可以使用 redis 或 HTMLPurifier 的替代缓存?
【发布时间】:2020-07-20 19:09:54
【问题描述】:

对 Laravel 7 使用 HTML Purifier (ezyang/htmlpurifier) 或特别是 (stevebauman/purify)(由前者提供支持),是否可以使用文件系统以外的替代缓存?

docs 暗示您可以使用 FS,或 null(不推荐)但也表明 FS 只是一个实现。其他实现是否可能(最好是 Redis),它们将如何配置?

【问题讨论】:

    标签: php caching redis htmlpurifier laravel-7


    【解决方案1】:

    目前有no official caches in the HTML Purifier library other than "Serializer"。也就是说,您可以编写自己的 HTMLPurifier_DefinitionCache 扩展名。

    为了能够加载您的自定义缓存,您必须使用DefinitionCacheFactory register 您的实现。据我了解,这应该可行:

    ...
    $factory = HTMLPurifier_DefinitionCacheFactory::instance();
    $factory->register('YourImplName', 'YourFullClassName');
    $config->set('Cache.DefinitionImpl', 'YourImplName');
    ...
    

    您可以在 DefinitionCache.php 中查看需要实现哪些方法,您需要扩展 (class YourFullClassName extends HTMLPurifier_DefinitionCache)。本着不让大部分答案只能在链接中访问的精神,以下是您必须实现的类的抽象方法:

        /**
         * 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);
    

    如果您发现需要覆盖该类中的一些其他方法,您可以覆盖它们,例如generateKey($config)isOld($key, $config)

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多