如手册中所述,它不起作用。我试过var_dump它也遇到了同样的问题。
ob_start()
$debugdata=print_r ($var,true)
这会在屏幕上打印结果,而不是存储到变量
答案 0 :(得分:5)
print_r的第二个参数是$return
,它允许输出作为字符串返回而不是输出:
$debugData = print_r($var, true);
没有必要为此使用输出缓冲,实际上它不能使用。您需要在此之前结束输出缓冲,然后在print_r调用后重新启动缓冲:
ob_start();
// stuff
$output = ob_end_clean();
$debugData = print_r($var, true);
ob_start();
// more stuff
$output .= ob_end_clean();
编辑:另一种选择是嵌套输出缓冲区并使内部缓冲区执行print_r工作:
ob_start(); // your original start
// stuff
ob_start();
print_r($var);
$debugData = ob_get_clean();
// more stuff
$output = ob_get_clean(); // your original end
答案 1 :(得分:3)
ob_start()
开始但缓冲。但是你也需要结束并检索缓冲区的内容。
以下是您可以使用的功能:
ob_get_clean()
- 将输出缓冲区的内容放在变量中,结束并清理缓冲区。
ob_start();
print_r($foo);
$output = ob_get_clean();
ob_get_contents()
- 获取输出缓冲区的内容而不关闭或清除它。
ob_end_clean()
- 关闭并清理缓冲区。
ob_start();
print_r($foo);
$output = ob_get_contents();
ob_end_clean();
还有其他一些可能性。 Please make yourself familiar with the output buffering functions
另外,一句话。您不只是将print_r
的输出分配给变量。您只需打印东西就像在屏幕上打印一样。启用输出缓冲后,所有输出都将被缓冲,而不是立即发送到stdout。所以,首先你print_r
,然后检索缓冲区的内容。
[编辑]
根据评论中的对话,我建议您查看print_r()
manual的备注部分。正如@RomiHalasz和@cbuckley所观察到的,由于print_r
的内部输出缓冲,它不能与ob_start()
一起使用
使用第二个参数 return ,因为两者将发生碰撞。
您必须使用输出缓冲和普通print_r
(仅使用第一个参数),或在将print_r
与第二个参数一起使用之前结束输出缓冲。
要么:
ob_start();
print_r($foo);
$output = ob_get_clean();
或者这个:
ob_start();
// blah
$output = ob_get_clean();
$output .= print_r($foo,true);
ob_start();
// blah
$output .= ob_get_clean();