我有一个模板文件,其中包含带有内联 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
来实现这种事情,但在这种情况下,尽管示例代码很简洁,但将模板放入内存的原因有很多(主要是因为每个模板可能位于需要相互解析的模板层次结构中,从而更改了原始模板结构)。
在此阶段,我试图避免使用临时文件。
我希望这个问题是清楚的,并希望就我的方法是否应该有效以及如果是,我可能做错了什么提供任何建议/想法。
这是你的问题:
使用 file_get_contents() 在脚本中读取模板。
file_get_contents()
几乎相当于fopen(); fread(); fclose()
。它只是将文件中的字节吸收到变量中。这些字节不会被执行,所以任何可能在该文件中的PHP代码块都保持为<
,?
,p
等。字符 - 它们不会被执行/替换。
您需要改用include()
。这将执行字节流中的任何PHP代码。
只是回显实际上并没有解析任何PHP。你需要的是eval
.在这里,我必须将我的模板转换为可以通过 php 解析的文本。
<?php
$str1 = " this is <?php echo '$i;?> now'n";
$i=99;
echo eval('?>' . $str1 . '<?php ');