PHP的file_get_contents与php完好无损?

时间:2010-01-13 23:13:21

标签: php include

与使用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次(比如它是一个博客列表),那么实际运行并包含每个模板似乎都很愚蠢。

我错了吗?有没有办法做到这一点?

6 个答案:

答案 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.3:Anonymous functions

5.2:create_function