你能把PHP文件渲染成变量吗?

dan*_*anb 16 php

如果我有这样的hello.php文件:

Hello, <?php echo $foo; ?>!
Run Code Online (Sandbox Code Playgroud)

我想在一些PHP代码中做这样的事情:

$text = renderPhpToString('hello.php', array('foo'=>'World'));
Run Code Online (Sandbox Code Playgroud)

并最终得到

$text == 'Hello, World!'
Run Code Online (Sandbox Code Playgroud)

这可能用标准的PHP 5吗?显然我想要更复杂的模板与循环等等..

Gum*_*mbo 37

你可以使用这样的函数:

function renderPhpToString($file, $vars=null)
{
    if (is_array($vars) && !empty($vars)) {
        extract($vars);
    }
    ob_start();
    include $file;
    return ob_get_clean();
}
Run Code Online (Sandbox Code Playgroud)

它使用输出缓冲区控制功能ob_start()来缓冲以下输出,直到它返回ob_get_clean().

编辑     确保验证传递给此函数的数据,以便$vars没有file可覆盖传递的$file参数值的元素.

  • 更好的希望有人不发送$ vars = array('file'=>'http://example.com/hax.php') (3认同)
  • @rmbarnes:这有点太偏执了.如果未来的开发人员是个白痴,那么他可以在世界上花费所有时间来解决自己的错误.:) (2认同)