在php中缓存模板

在php中缓存模板,php,caching,Php,Caching,我有一个扩展名为.php的模板。 此模板包含html标记以及一些php变量。这就是它的样子 include_once VIEWDIR . 'documentation/common/header.php'; include_once VIEWDIR . 'documentation/content/'.$this->view.'.php'; include_once VIEWDIR . 'documentation/common/leftsidebar.php'; include_o

我有一个扩展名为.php的模板。 此模板包含html标记以及一些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变量

我知道我做错了什么,但没能抓住它。请提供帮助。

一般情况下的缓存 根据定义,缓存会缓存各个变量的值

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

通过这种方式,缓存将使用新值重新生成,您将拥有两个方面的优势:

  • 一方面,当缓存命中时,HTTP响应速度更快
  • 另一方面,当某些值更改时,页面的动态性
缓存在您的案例中 免责声明:这不一定会将您的问题用作展示。如果你需要更切题的答案,你应该改进你的问题

如果模板的某些区域经常更改,而有些区域不经常更改,则应仅单独缓存那些不经常更改的部分,并将包含更改变量的整个模板作为一个整体保留为未缓存状态

不要忘记如上所述处理各个缓存,以使系统具有正确的行为

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

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
echo$cache->get(VIEWDIR.'documentation/common/header.php')//视图“.php”);

echo$cache->get(VIEWDIR.'documentation/common/leftsidebar.php')//get(VIEWDIR.'documentation/common/rightsidebar.php')// 只是不要缓存它们。
您的“缓存”方式根本不是缓存,但这不是主要问题。
问题是,我怀疑您是否有任何理由缓存模板或其输出


所以,让一切保持原样,没有任何“缓存”

那么您使用这个缓存的目的是什么?您正在用值替换变量,并将其写入缓存,这样在下一次运行时就不必再次组装它。这就是缓存的工作方式…@dev null-allender-谢谢。我有点困惑。我想把静态内容和变量分开。这样我就可以缓存静态内容了。我知道我不能用我这样做的方式来实现这一点。他们还有别的选择吗?我不需要任何代码,只是一点想法。我明白你的意思。但是他们的任何缓存静态内容的方法都会留下变量。我有点困惑,不能正确地提出我的问题。我的模板总是常量,除了几个变量。我不希望在刷新时一次又一次地加载静态模板。@AbhishekSaha那么您应该只单独缓存那些不经常更改的部分,并将包含更改变量的整个模板作为一个整体保留为未缓存。谢谢。我正在努力理解你的答案。我很快会回复的。@AbhishekSaha当然,如果有什么不清楚的地方,只要问一下,这样我就可以改进我的答案,这样你和其他读者也可以从中受益。谢谢。我明白你的意思。有道理。我唯一不明白的是如何缓存模板的特定部分?这正是我想要的。我知道我的模板结构不正确。这个怎么样。假设第二个include总是不同的(请参见我的代码)。所以我要做的就是在这条线的上方和下方写一条评论。因此,当我加载缓存时,我会进行预替换并更改其中的内容。你觉得怎么样?谢谢。正如您在my templete.php中看到的那样,标题和边栏总是不变的。所以我不想一次又一次地加载它们。唯一不同的是第二个包含。包括“一次查看目录”文档/content/'.$this->view'.php';他们还有其他方法吗?这是一个好方法吗:如果我使用.html扩展名创建模板,那么当然不会解析php变量。然后,当我包含这个缓存时,我将标题内容类型更改为php,以便它可以解析php变量。这样行吗?