如何在PHP中将echo()的结果捕获到变量中?

6

我正在使用一个PHP库,它会输出结果而不是返回结果。有没有一种简单的方法可以捕获echo / print的输出并将其存储在变量中?(其他文本已经被输出,并且没有使用输出缓冲区。)

4个回答

15

您可以使用输出缓冲:

ob_start();

function test ($var) {
    echo $var;
}

test("hello");
$content = ob_get_clean();

var_dump($content); // string(5) "hello"

但这不是一种清晰和有趣的语法使用方式。找到一个更好的库可能是个好主意...


1
ob_start()函数文档提供了一些细节:http://www.php.net/manual/en/function.ob-start.php - Kel
2
ob_get_contents()会捕获所有被回显的内容,但不会阻止它在以后发送到浏览器。字符串将被捕获并回显。如果您想要捕获而不是回显,则应使用ob_get_clean() - kijin
你是完全正确的,kijin。在你发表评论之前,我进行了一些编辑。 - Vincent Savard

5
我知道的唯一方法。
ob_start();
echo "Some String";
$var = ob_get_clean();

1

如果可能的话,你应该真的重写这个类。我怀疑找到echo/print语句并用$output .=来替换它们不会很难。使用ob_xxx确实会消耗资源。


0

最好的做法是在应用程序完全完成之前不要回显数据,例如:

<?php
echo 'Start';

session_start();
?>

现在session_start与另一个字符串函数将无法工作,因为已经输出了响应数据,但通过以下操作可以解决:
<?php
$output = 'Start';

session_start();

echo $output;
?>

这种方法可行且更少出错,但如果必须捕获输出,则应执行以下操作:

ob_start();

//Whatever you want here

$data = ob_get_contents();

//Then we clean out that buffer with:
ob_end_clean();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接