从模板执行php代码

时间:2016-04-22 12:44:00

标签: php html

我在PHP中有以下代码:

if ($maintenance_mode == true)
{
    $file = 'maintenance-header.php';
    $template = file_get_contents($t_includes_path . $file);
}
else
{
    $file = 'main-header.php';
    $template = file_get_contents($t_includes_path . $file);
}

require_once($s_system_path . 'templater.php');

然后在templater.php

$page = str_replace(array(
    '{slang}',
    '{site_title}',
    '{site_desc}',
    '{keywords}',
    '{t_assets_path}',
    '{s_assets_path}',
    '{i_assets_path}',
    ), array(
    $slang,
    $site_title,
    $site_content,
    $keywords,
    $t_assets_path,
    $s_assets_path,
    $i_assets_path,
    ),
    $template);
echo $page;

问题在于,如果我尝试在模板文件本身中使用php代码,则无法识别它并将其解析为注释/纯文本。例如:

if (htmlentities($_GET['lang'], ENT_QUOTES) == 'en')
{
    echo 'English';
}
else if (htmlentities($_GET['lang'], ENT_QUOTES) == 'ru')
{
    echo 'Russian';
}
else
{
    echo 'Other';
}

如何处理?我真的想使用{site_title}而不是<?php echo $site_title; ?>等。我希望尽可能保持代码清洁。

1 个答案:

答案 0 :(得分:0)

你必须exectue你的PHP代码。如果你只是'回显'它,你的字符串中的代码将不会被执行,只是打印在页面上。 例如,您可以使用eval()函数,但请确保用户无法强制您的Web eval()他们的代码..如文档中所述:

http://php.net/manual/en/function.eval.php