如何在字符串上使用ob_start


How to use ob_start on a string?

我有一个项目,我正在使用OB_START从PHP文件收集输出。问题是,有时我在一次调用中需要20-30次PHP文件的内容。

我想做一些类似get_file_contents({file})的操作,然后将该字符串用于OB_START()调用。然而,我看到的所有示例每次都使用include()调用来获取脚本。

有没有一种方法可以一次加载脚本,但在OB_START()调用中多次使用它?

ob_start();
include "file.php";
$output = ob_get_clean();

我想做的事:

$script = get_file_contents(file);
$output = '';
begin loop;
ob_start();
{somehow make $script execute as code}
$output .= ob_get_clean();
end loop;

您可以反复使用include

$file = "SomeScript.php"
$output = '';
begin loop;
ob_start();
include $file
$output .= ob_get_clean();
end loop;

如果你一意孤行地按照你描述的方式做,你可以做以下事情,但这很奇怪:

$script = get_file_contents(file);
$output = '';
begin loop;
ob_start();
eval($script);
$output .= ob_get_clean();
end loop;

在我看来,一个更好的解决方案是让脚本成为一个输出结果的函数,而不是打印结果。假设您将"脚本"放入一个函数调用foo()中,然后您可以执行以下操作:

$file = "SomeScript.php"
include $file
$output = '';
begin loop;
$output .= foo();
end loop;

但是,如果您不能更改脚本的内容,那么我的前两个示例应该适用于您。