我有一个模板文件,其中包含带有内联PHP echo语句的html。例如,模板可能如下所示:
<div class="<?php echo $classes ?>">
<div class="uk-container uk-container-center">
<section class="uk-grid uk-grid-match" data-uk-grid-match="{target:'> div > .uk-panel'}" data-uk-grid-margin>
<?php echo $content ?>
</section>
</div>
</div>
使用file_get_contents()在脚本中读取模板。然后我打开输出缓冲。变量$classes
和$content
在调用ob_start()时属于范围。
ob_start();
echo $htmlTemplateString;
$resolvedMarkup = ob_get_clean();
不幸的是,$ resolvedMarkup包含从模板文件中读取的原始字符串,并且内联的echo语句仍然存在,并且未解析为引用变量的值。
我的问题是,我是否正确地解释了这种用法?我应该回来一个完全解析的字符串吗?
通常情况下,我可以使用include
来实现这类功能,但在这种情况下,尽管示例代码简洁,但模板被带入内存的原因很多(主要是因为每个模板可能都是在需要相互解析的模板层次结构中,改变原始模板结构。)
在这个阶段,我试图避免使用临时文件。
我希望这个问题很明确,并希望我的方法是否有用,以及如果可行,我可能做错了什么的任何建议/想法。
答案 0 :(得分:0)
这是你的问题:
使用file_get_contents()在脚本中读取模板。
file_get_contents()
几乎相当于fopen(); fread(); fclose()
。它只是将文件中的字节变为变量。这些字节不会被执行,因此该文件中的任何PHP代码块都可以保留为<
,?
,p
等...字符 - 它们不会被执行/替换。
您需要使用include()
代替。这将执行字节流中的任何PHP代码。
答案 1 :(得分:0)
只是echo实际上并不解析任何PHP。你需要的是eval
。
在这里,我必须将我的模板转换为可以通过php解析的文本。
<?php
$str1 = " this is <?php echo \$i;?> now\n";
$i=99;
echo eval('?>' . $str1 . '<?php ');