我正在设计自己的MVC模式以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我一直在寻找一段时间,似乎无法找到解决方案。如何从file_get_contents或函数中的文件运行php代码
我该如何通过PHP函数像php一样运行代表某些源代码的字符串(“<?”,“<?php”,“?>”等等)? Eval不会拿我的<?迹象(并且由于某种原因,我读了这个函数是废话)。
我正在设计自己的MVC模式以简化创建主页的过程。我的模板系统需要我的控制器类来输出我的视图。这意味着我必须通过php函数输出文件。我一直在寻找一段时间,似乎无法找到解决方案。如何从file_get_contents或函数中的文件运行php代码
我该如何通过PHP函数像php一样运行代表某些源代码的字符串(“<?”,“<?php”,“?>”等等)? Eval不会拿我的<?迹象(并且由于某种原因,我读了这个函数是废话)。
你可以执行PHP代码,收集这样的输出:
ob_start();
include "template.phtml";
$out1 = ob_get_clean();
只需包含()该文件,而不是应该没事。我还没有深入研究源代码,但我相当肯定Zend Framework如何实现模板。
好,EVAL是不是废话本身,它只是简单的创建一个安全漏洞有,如果你对于你在eval内部允许的内容(这可能会导致代码的可读性不好),你不会小心。
至于<?
标志,这是因为eval期望php代码,所以如果你不想将php与纯输出混合,只包含关闭?>
标签。
但是,通常情况下,您可以更好地实现模板,尝试查看输出缓冲。
用“include()”替换“echo file_get_contents()”,因为GordonM建议完全按照需要工作。因为我太新了,所以不能满意,但是为了我的需要,这是问题的直接答案。
$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);
您还可以用'$ out1 = ob_get_clean();' –
@Affan替换掉最后两行右图,谢谢! – PiTheNumber