如果我将Twig的缓存配置为myapp/storage/cache并手动设置正确的权限,它就会工作,但将其配置为sys_get_temp_dir()(返回/tmp)似乎不起作用。/tmp中的文件结构保持不变,但不会触发错误。
我的代码块是这样的:

// [...]
$app->register(new \Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => __DIR__ . '/templates',
    'twig.options' => array(
        'cache' => sys_get_temp_dir(), // If changed to myapp/storage/cache, it works.
    ),
));

最佳答案

我不知道这是否有帮助,但可以重写writeCacheFile的默认Twig_Environment方法。通过这样做,您可以自己创建临时文件夹并应用所需的权限,这样您的用户就不必自己创建临时文件夹。
自定义细枝环境

class Environment extends \Twig_Environment {
    protected function writeCacheFile($file, $content){
        createDirectoryTree(dirname($file));
        parent::writeCacheFile($file, $content);
        chmod($file,0664);
        chgrp($file, 'psacln');
        chown($file, 'www-data');
    }
}

函数.php
function createDirectoryTree($folder) {
    if (is_dir($folder)) return;
    $folder = str_replace('/', DIRECTORY_SEPARATOR, $folder);
    $branches = explode(DIRECTORY_SEPARATOR, $folder);
    $tree = '';

    $old_mask = umask(0);
    while(!empty($branches)) {
        $tree .= array_shift($branches).DIRECTORY_SEPARATOR;
        if (!@file_exists($tree)) {

            if (@mkdir($tree, 0774)){
                chown($tree, 'www-data');
                chgrp($tree, 'psacln');
            }
        }
    }
    umask($old_mask);
}

关于php - Twig 1.x-将缓存配置为/tmp不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42677722/

10-10 22:03