可以将PHP文件呈现为变量吗?
如果我有这样一个hello.php文件:可以将PHP文件呈现为变量吗?,php,Php,如果我有这样一个hello.php文件: Hello, <?php echo $foo; ?>! function renderPhpToString($file, $vars=null) { if (is_array($vars) && !empty($vars)) { extract($vars); } ob_start(); include $file; return ob_get_clean(); }
Hello, <?php echo $foo; ?>!
function renderPhpToString($file, $vars=null)
{
if (is_array($vars) && !empty($vars)) {
extract($vars);
}
ob_start();
include $file;
return ob_get_clean();
}
结果是
$text == 'Hello, World!'
标准PHP5是否可以实现这一点?很明显,我想要更复杂的带循环的模板等等
输出缓冲可能是开始的地方。您可以使用以下功能:
Hello, <?php echo $foo; ?>!
function renderPhpToString($file, $vars=null)
{
if (is_array($vars) && !empty($vars)) {
extract($vars);
}
ob_start();
include $file;
return ob_get_clean();
}
它使用输出缓冲控制功能缓冲以下输出,直到它由ob\u get\u clean()
返回
编辑确保验证传递给此函数的数据,以便
$vars
没有覆盖传递的$file
参数值的文件
元素。您可以使用,但是使用众多模板引擎中的一个可能会更好。正如Gumbo所说,您必须检查$file变量,这是一个已经困扰我的微妙错误。我会使用func_get_arg(I)并且根本没有变量,还有一件小事,我会使用require
function renderPhpToString( )
{
if( is_array( func_get_arg(1) ) ) {
extract( func_get_arg(1) );
}
ob_start();
require func_get_arg( 0 );
return ob_get_clean();
}
关于传递
$vars=array('file'=>'/etc/passwd')
,您可以使用提取($vars,EXTR\u SKIP)代码>最好不要有人发送$vars=array('file'=>')这正是我要找的。在我的例子中,没有必要担心用户输入。谢谢!>>在我的例子中,没有必要担心用户输入。您不仅担心这里的用户输入;未来的开发人员可以使用$vars=array('file'=>')调用函数,然后花相当长的时间对此进行解释。@rmbarnes:这有点太偏执了。如果未来的开发人员是一个白痴,那么他可以花世界上所有的时间来纠正自己的错误。:)另一方面,只需编写<代码> $file <代码>无害的东西,如<代码> $Butgs<代码>,而不必担心验证输入。为什么不做<代码> $VARs= []/Cord>?如果你认为你可能需要<代码> ExpSkip ,你应该考虑是否没有更好的解决方案。