PHP中包含的SSI作为模板不起作用

时间:2014-05-09 08:49:21

标签: php apache templates ssi templatepower

我正在使用用PHP编写的Ganglia-web-frontend。它使用模板文件添加个人页眉/页脚。我想使用我编写的SSI页面,但SSI代码不是由apache解释的。

更清楚的是,ganglia使用$tpl = new TemplatePower( template("$header.tpl") );来包含我的标题模板文件。在我的header.tpl文件中,我放了:<!--#include virtual="/include/header.shtml" -->这是我的包含文件(并且与我的个人页面/脚本完美配合)。

如果查看我在firefox(ctrl + U)中获得的HTML代码,我看到apache已将SSI区域<!--#include virtual="/include/header.shtml" -->作为注释包含在内,并且尚未对其进行解释。

我认为与解释/执行事物的顺序有关,但我无法找到实现它的方法。有没有人有想法?如果需要,我也可以根本访问apache配置。

提前致谢

编辑:

根据Sasha的建议,我试图添加

AddType text/html .tpl 
AddHandler server-parsed .tpl
AddOutputFilter INCLUDES .tpl

/etc/apache2/httpd.conf ,但这没有帮助。我不明白......

编辑2:

我想这可能是PHP TemplatePower模块的一个问题。但我无法让它发挥作用。我曾尝试在神经节来源中添加$tpl->assignInclude( "header", "./header.tpl" );,但这没有帮助。

2 个答案:

答案 0 :(得分:4)

Apache是​​否配置为将.tpl文件预处理为服务器端包含?如果没有,它将忽略这些文件中的SSI指令。

'Enabling Server-Side Includes' in the mod_include documentation部分详细介绍了如何配置此功能。您需要确保.tplAddType指令中存在AddOutputFilter

答案 1 :(得分:2)

您正在将模板加载为TemplatePower模板。所以不是apache托管该.tpl文件,但你的脚本是通过TemplatePower对象。

因此,这超出了apache的内容处理程序和操作处理程序的范围。

如果你正在运行PHP作为apache SAPI,你可以使用virtual()函数。

然后,您可以扩展模板引擎以解释那些包含虚拟SSI命令并调用virtual()函数。

所以关键点在于,最终Apache需要通过子请求执行shtml模板。