如何在函数中从文件获取内容或文件运行php代码
我正在设计自己的MVC模式,以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我已经找了一段时间了,似乎找不到解决办法如何在函数中从文件获取内容或文件运行php代码,php,templates,model-view-controller,file-io,eval,Php,Templates,Model View Controller,File Io,Eval,我正在设计自己的MVC模式,以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我已经找了一段时间了,似乎找不到解决办法 如何通过一个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%确定没有其他方法