如何在函数中从文件获取内容或文件运行php代码

如何在函数中从文件获取内容或文件运行php代码,php,templates,model-view-controller,file-io,eval,Php,Templates,Model View Controller,File Io,Eval,我正在设计自己的MVC模式,以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我已经找了一段时间了,似乎找不到解决办法 如何通过PHP函数运行表示某些源代码的字符串等等,比如php?Eval不会接受我的建议?签名,我读到函数出于某种原因是垃圾。只包含文件就可以了。我没有深入研究源代码,但我相当肯定Zend Framework就是这样实现模板的 您可以执行php代码并收集如下输出: ob_start(); include "template.p

我正在设计自己的MVC模式,以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我已经找了一段时间了,似乎找不到解决办法


如何通过PHP函数运行表示某些源代码的字符串等等,比如php?Eval不会接受我的建议?签名,我读到函数出于某种原因是垃圾。

只包含文件就可以了。我没有深入研究源代码,但我相当肯定Zend Framework就是这样实现模板的

您可以执行php代码并收集如下输出:

ob_start();
include "template.phtml";
$out1 = ob_get_clean();

好的,eval本身并不是垃圾,如果你不小心在eval中允许什么,那么很容易就会产生一个安全漏洞,这可能会影响代码的可读性

至于标签


但是,一般来说,您可以以更好的方式实现模板,尝试查看输出缓冲。

用GordonM建议的include替换echo file\u get\u内容完全可以根据需要工作。因为我太新了,还不能投票,但出于我的需要,这是标题问题的直接答案

您还可以将最后两行替换为$out1=ob\u get\u clean;很好。那么当代码的一部分包含$this时呢?@TadeuszMajkowski:如果代码中包含$this,那么它就是一个类的方法。您可以在调用对象的方法时执行相同的操作。如果您有问题,请创建一个新的问题以获得帮助。永远不要在PHP脚本中使用eval,除非您100%确定没有其他方法
$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);