Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数中从文件获取内容或文件运行php代码_Php_Templates_Model View Controller_File Io_Eval - Fatal编程技术网

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

如何在函数中从文件获取内容或文件运行php代码,php,templates,model-view-controller,file-io,eval,Php,Templates,Model View Controller,File Io,Eval,我正在设计自己的MVC模式,以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我已经找了一段时间了,似乎找不到解决办法 如何通过一个PHP函数运行一个字符串,将一些源代码(“

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


如何通过一个PHP函数运行一个字符串,将一些源代码(“<?”、“<?PHP”、“?>”等等)表示为PHP?Eval不会接受我的建议?符号(我读到函数出于某种原因是垃圾)。

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

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

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

好吧,eval本身并不是垃圾,如果你不小心在eval中允许什么(这可能会影响代码的可读性),那么它很容易造成安全漏洞

至于
标签

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

将GordonM建议的“echo file\u get\u contents()”替换为“include()”,效果完全符合需要。因为我太新了,还不能投票,但出于我的需要,这是标题问题的直接答案

$code=''$代码);
$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);
$output=ob_get_contents(); ob_end_clean(); 返回$output; } 打印_readphp_eval($code);
您还可以将最后两行替换为
$out1=ob_get_clean()工作正常。当代码的一部分有$this时会怎样?@TadeuszMajkowski:如果代码中有
$this
,那么它是一个类的方法。您可以在调用对象的方法时执行相同的操作。如果您有问题,请创建一个新的问题以获得帮助。永远不要在PHP脚本中使用eval,除非您100%确定没有其他方法