2

我想稍微深入一点 Smarty 缓存,所以我有一些简单的问题......

  1. 为了操纵缓存失效,我想知道 Smarty 将其缓存存储在哪个目录中。例如,与user_id=123我要存储在cache/users/123/. cachesmarty缓存目录在哪里。如何告诉 smarty 存储与user_id=123at相关的缓存cache/users/123/?Smarty 是否也会在此目录中存储子模板的缓存?

  2. 有没有关于清理这个目录中的缓存的建议?我认为,如果某些访问者当前正在访问此页面,则简单地从该目录中删除文件可能会导致一些错误(当 smarty 看到找到模板缓存时会发生错误,但由于它已经被删除,所以找不到子模板缓存,例如)。

任何建议和意见表示赞赏。

谢谢你。

4

3 回答 3

1

您不应该手动清除缓存。为此使用 clear_cache() 和 clear_compiled_tpl()。您可以清除所有缓存,也可以对它们进行选择性清除。

于 2010-08-10T13:53:44.697 回答
0

使用可以切换 smarty cachedir,具体取决于您想要的位置(您可以使用一些自己的 if 语句检查)

// Create smarty object
$smarty = new Smarty();

// Change smarty-dir is like this:
if (isset($_GET['userId'])) {
    $smarty->compile_dir = '/path/to/dir/' . $_GET['userId'];
} else {
    $smarty->compile_dir = '/path/to/dir/default';
}

第二点有点难,你必须遍历所有的映射,并分配新的编译目录,然后运行以下命令:

$smarty->clear_cache();

但正如您所说,有可能在删除时请求文件。:-(


但不建议使用不同的缓存文件夹,Smarty 不缓存输出,只缓存编译后的 PHP 文件。

于 2010-08-10T13:16:03.860 回答
0

查看 Smarty 文档:“缓存组”部分。正是这样做的。

于 2010-08-10T16:19:29.257 回答