在PHP中使用vars和file_get_contents创建模板

时间:2013-09-16 16:48:14

标签: php

我有一个从文件中读取的php页面:

$name = "World";
$file = file_get_contents('html.txt', true);
$file = file_get_contents('html.txt', FILE_USE_INCLUDE_PATH);

echo $file;

在html.txt中我有以下内容:

Hello $name!

当我去网站时,我得到“Hello $ name!”而不是Hello World!

有没有办法让txt文件中的var输出它们的值而不是它们的名字?

谢谢, 布赖恩

3 个答案:

答案 0 :(得分:1)

file_get_contents的第二个参数与如何解释文件无关 - 它是关于在查找该文件时要检查的修补程序。

但是,结果始终是完整的字符串,您只能使用evial“重新插入”它。

使用includeoutput control functions的组合可能是一个更好的主意:

主要文件:

<?php

$name = "World";
ob_start();
include('html.tpl');
$file = ob_get_clean();
echo $file;

<强> html.tpl:

Hello <?= $name ?>

请注意,文本(<?= ... ?>)文件中的php标记('.tpl') - 没有它$name将不会被解析为变量名称。

答案 1 :(得分:0)

要专门回答你的问题,你需要在php中使用'eval'功能。 http://php.net/manual/en/function.eval.php

但是从开发的角度来看,我会考虑是否有更好的方法来实现这一点,或者通过将$ name存储在更容易访问的地方或者重新评估您的流程。使用eval函数之类的东西会带来一些严重的安全风险。

答案 2 :(得分:0)

使用预定义值(而不是作用域中的所有变量)的一种可能方法:

    $name = "World";
    $name2 = "John";

    $template = file_get_contents ('html_templates/template.html');

    $replace_array = array(
        ':name' => $name,
        ':name2' => $name2,
        ...
    );

    $final_html = strtr($template, $replace_array);

在template.html中,您将看到以下内容:

    <div>Hello :name!</div>
    <div>And also hi to you, :name2!</div>