在php中缓存模板

时间:2012-12-22 10:46:00

标签: php caching

我有一个扩展名为.php的模板。 这个模板包含html maarkup以及一些php变量。这就是它的样子。

include_once VIEWDIR . 'documentation/common/header.php';

include_once VIEWDIR . 'documentation/content/'.$this->view.'.php';

include_once VIEWDIR . 'documentation/common/leftsidebar.php';

include_once VIEWDIR . 'documentation/common/rightsidebar.php';

这是我缓存的方式。

ob_start();
include_once('template.php');
$templateCache = ob_get_clean();

然后我将它存储在.cache文件中。

问题是当我从缓存加载模板时,它无法读取php变量。

我知道我做错了但却无法抓住它。请帮忙。

2 个答案:

答案 0 :(得分:1)

一般缓存

根据定义,缓存会缓存各个变量的值。

您要做的是在模板中使用的其中一个变量更改其值时删除缓存。

这样,缓存将使用新值重新生成,并且您将拥有两个世界的优势:

  • 一方面,当有缓存命中时,更快的HTTP答案
  • 另一方面,当某些值发生变化时,页面的动态性

在你的情况下缓存

免责声明:这并不一定会将您的问题用作展示。如果您需要一个更为重要的答案,您应该改进您的问题。

如果您的模板有一些经常更改的区域,而另一些区域没有更改,那么您应该仅单独缓存那些不经常更改的部分,并将包含未更改变量的整个模板保留为整体。< / p>

不要忘记按上述方法处理单个缓存,以使系统具有正确的行为。

因此,不是缓存整个文件,而是将其重写为:

echo $cache->get(VIEWDIR . 'documentation/common/header.php');//<-- this is a cache
include_once VIEWDIR . 'documentation/content/'.$this->view.'.php');
echo $cache->get(VIEWDIR . 'documentation/common/leftsidebar.php');//<-- this is a cache
echo $cache->get(VIEWDIR . 'documentation/common/rightsidebar.php');//<-- this is a cache

并且您将模板的各个部分视为缓存本身。

答案 1 :(得分:1)

只是不要缓存它们 你的“缓存”方式根本不是缓存,但这不是主要问题 问题是我怀疑你有任何理由缓存你的模板或他们的输出。

所以,只要保持原样,不要“缓存”。