【发布时间】:2010-10-30 20:30:37
【问题描述】:
我正在使用一个响应结果而不是返回结果的 PHP 库。有没有一种简单的方法可以从 echo/print 捕获输出并将其存储在变量中? (其他文本已经输出,没有使用输出缓冲。)
【问题讨论】:
我正在使用一个响应结果而不是返回结果的 PHP 库。有没有一种简单的方法可以从 echo/print 捕获输出并将其存储在变量中? (其他文本已经输出,没有使用输出缓冲。)
【问题讨论】:
您可以使用输出缓冲:
ob_start();
function test ($var) {
echo $var;
}
test("hello");
$content = ob_get_clean();
var_dump($content); // string(5) "hello"
但这不是一种干净有趣的语法。找一个更好的库可能是个好主意...
【讨论】:
ob_get_contents() 将捕获回显的任何内容,但不会阻止稍后将其发送到浏览器。该字符串将被捕获并回显。如果你想捕获而不是回显,你应该使用ob_get_clean()
我知道的唯一方法。
ob_start();
echo "Some String";
$var = ob_get_clean();
【讨论】:
如果可以的话,你真的应该重写这个类。我怀疑很难找到 echo/print 语句并将它们替换为$output .=。使用 ob_xxx 确实会占用资源。
【讨论】:
例如,在您的应用程序完全完成之前不要回显数据,这始终是一个好习惯
<?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();
【讨论】: