2011-12-12 74 views
9

我正在设计自己的MVC模式以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我一直在寻找一段时间,似乎无法找到解决方案。如何从file_get_contents或函数中的文件运行php代码

我该如何通过PHP函数像php一样运行代表某些源代码的字符串(“<?”,“<?php”,“?>”等等)? Eval不会拿我的<?迹象(并且由于某种原因,我读了这个函数是废话)。

回答

2

只需包含()该文件,而不是应该没事。我还没有深入研究源代码,但我相当肯定Zend Framework如何实现模板。

0

好,EVAL是不是废话本身,它只是简单的创建一个安全漏洞有,如果你对于你在eval内部允许的内容(这可能会导致代码的可读性不好),你不会小心。

至于<?标志,这是因为eval期望php代码,所以如果你不想将php与纯输出混合,只包含关闭?>标签。

但是,通常情况下,您可以更好地实现模板,尝试查看输出缓冲。

3

用“include()”替换“echo file_get_contents()”,因为GordonM建议完全按照需要工作。因为我太新了,所以不能满意,但是为了我的需要,这是问题的直接答案。

1
$code = '<?php 
function GetBetween($content, $start, $end) { 
    $r = explode($start, $content); 
    if (isset($r[1])){ 
    $r = explode($end, $r[1]); 
    return $r[0]; 
    } 
    return ''; 
}'; 

function _readphp_eval($code) { 
    ob_start(); 
    print eval('?>'. $code); 
    $output = ob_get_contents(); 
    ob_end_clean(); 
    return $output; 
} 

print _readphp_eval($code);