与使用include,在文件中执行包含的php相反...是否可以将php文件的内容保存到变量中 - 但是php仍然完整且可执行?
我的目标看起来像:
$template = some_imaginary_include_function('myfile.php');
foreach($list_of_blogs as $blog) {
// somehow get blog content in template and render template;
}
我知道这是一个愚蠢的例子......但我希望它能说明一般的想法。如果我必须在页面上循环模板50次(比如它是一个博客列表),那么实际运行并包含每个模板似乎都很愚蠢。
我错了吗?有没有办法做到这一点?
答案 0 :(得分:19)
这个怎么样......
function getTemplate($file) {
ob_start(); // start output buffer
include $file;
$template = ob_get_contents(); // get contents of buffer
ob_end_clean();
return $template;
}
基本上,这将得到$file
,并用PHP解析它,然后将输出返回到变量。
答案 1 :(得分:4)
通过使用$content = file_get_contents('/path/to/your/file.php');
将保留所有PHP标记,然后您可以eval()
或tokenize
他们做任何您想做的事。
答案 2 :(得分:1)
在循环中执行include不是 SO dumb 。
在包含之前定义的所有变量都可以在模板中访问。
保持简单!
==编辑==
或许你可以改进亚历克斯的答案:
function getTemplate($file, $template_params = array()) {
ob_start(); // start output buffer
extract($template_params); // see PHPDoc
// from here $var1 will be accessible with value "value1"
// so your template may contain references to $var1
include $file;
$template = ob_get_contents(); // get contents of buffer
ob_end_clean();
return $template;
}
echo getTemplate('your_template.php', array('var1' => 'value1'));
(不再那么简单了^^)
答案 3 :(得分:0)
在包含的PHP脚本中编写一个函数,返回所需的输出。在主PHP脚本中定义一个常量。在包含的PHP脚本中,检查是否存在所述常量,并在这种情况下回显函数的返回值。
答案 4 :(得分:0)
尽管它通常被认为是邪恶的,但您可以尝试使用eval()以及get_file_contents()
答案 5 :(得分:0)
如果你在5.3中开发它会更容易,但即使在5.2上你也可以使用所谓的匿名函数来实现这一点。
匿名函数允许您将代码作为变量传递。要从文件中加载此代码,您可能需要将file_get_bytes转换为字符串,然后将其放入变量中,然后输入我希望的点。
5.2:create_function