Kohana Twig模块的缓存文件权限修复

时间:2016-04-20 10:07:25

标签: caching twig kohana file-permissions

如何配置Kohana + Twig模块,以便Twig将"所有" 权限写入所有" 的权限。 s后代文件?

因此,例如,当我通过Apache模块(mod_php)运行我的应用程序并且缓存文件所有者是apache(或httpd)用户时,我会能够使用常规用户和ssh访问权限删除缓存文件(清理缓存或完全删除整个应用程序)。

我能够使用Kohana的缓存,但Twig的缓存以不同的方式创建。

1 个答案:

答案 0 :(得分:0)

它不是很容易,但也不是太复杂。我通过反复试法获得了下面的状态。

  1. 创建一个继承自Twig_Cache_Filesystem的类,并使用代替。看看这个:

    <?php
    namespace Application\Twig;
    
    class Cache_Filesystem extends \Twig_Cache_Filesystem
    {
        public function write($key, $content)
        {
            $old = umask(0000);
            parent::write($key, $content);
            umask($old);
        }
    }
    

    请注意,此类必须具有唯一的名称,因此最好对其进行命名。此外,它必须可供其他代码访问,因此请考虑使用composer的自动加载功能。

    这是修复本身,本指南的其余部分只是将其实施到Kohana + Twig生态系统中的方式。

  2. Twig.phpmodules/kohana-twig/classes/Twig.php复制到您的应用程序目录中,即application/classes/Twig.php(谢谢Kohana's Cascading Filesystem!)

  3. 修改一个新复制的文件,让Twig_CacheInterface实例在配置文件(application/config/twig.php)中传递,而不仅仅是一个简单的字符串(指定Twig的缓存)目录)。看看我的例子:

    <?php defined('SYSPATH') or die('No direct script access.');
    
    class Twig extends Kohana_Twig
    {
        /**
         * Initialize the Twig module
         *
         * @throws Kohana_Exception
         * @return bool
         */
        public static function init()
        {
            $path = Kohana::$config->load('twig.environment.cache');
            if (is_string($path)) {
                return parent::init();
            } else if ($path instanceof Twig_CacheInterface) {
                return true;
            }
    
            throw new Kohana_Exception('Twig cache could not be initialized');
        }
    
    }
    
  4. kohana-twig模块的配置文件中,即application/config/twig.php(如果尚未从模块复制到您的应用程序,请立即执行),定义environment.cache键,如下所示:< / p>

    return array(
    
        'loader' => array(
            'extension' => 'twig',
            'path' => 'views',
        ),
        'environment' => array(
            'auto_reload' => (Kohana::$environment >= Kohana::TESTING),
            'autoescape' => true,
            'base_template_class' => 'Twig_Template',
            // Following line is related to this issue and fix:
            'cache' => new \Application\Twig\Cache_Filesystem(APPPATH . 'cache/twig'),
            'charset' => 'utf-8',
            'optimizations' => - 1,
            'strict_variables' => false,
        ),
        'functions' => array(),
        'filters' => array(),
        'tests' => array(),
    }
    
  5. 这对我有用。希望它能帮助那些在类似问题上挣扎的人。