如何从file_get_contents运行php代码或在函数中运行文件

时间:2011-12-12 10:20:45

标签: php templates model-view-controller file-io eval

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

我如何通过PHP函数运行一个表示某些源代码(“<?”,“<?php”,“?>”等)的字符串作为php? Eval不会把我的< ?标志(我因某种原因读到这个功能是垃圾)。

5 个答案:

答案 0 :(得分:24)

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

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

http://www.php.net/manual/de/function.ob-get-contents.php

答案 1 :(得分:4)

将“echo file_get_contents()”替换为“include()”,因为GordonM建议完全按照需要工作。因为我太新了但不能满足我的需求这是对标题问题的直接回答。

答案 2 :(得分:3)

只需包含()文件就可以了。我没有深入挖掘源代码,但我很确定Zend Framework是如何实现模板的。

答案 3 :(得分:0)

嗯,eval本身并不是垃圾,如果你不小心你在eval里面允许的东西,那就很容易创建一个安全漏洞(也许这可能对你的可读性有害)代码)。

至于<?标志,那是因为eval需要php代码,所以如果你不想将php与普通输出混合,只包括结束?>标签。

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

答案 4 :(得分:0)

$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);