0

以下没有达到我想要的

<?
echo ob_start() . "<br>";
echo "1x<br>";
echo ob_start() . "<br>";
echo "2x<br>";
echo ob_flush() . "<br>";
echo "3x<br>";
echo ob_flush() . "<br>";
?>

输出如下

1
1x
1
2x
1
3x
1

我想要一些类似的东西

1x
3x
2x

我认为问题在于它将第二个 ob_start() 的输出放在第一个输出缓冲区中。但是我怎样才能得到我想要的输出呢?

基本上,我想要实现的是在输出的后一点提供需要位于 HTML 文档头部的标记。即,在脚本已经打印了它需要的文档头信息之后的一半,然后提供 .

4

5 回答 5

2

请参阅 PHP 手册了解ob_start。你不想

echo ob_start();

因为该函数返回 true 或 false,所以它将输出 1 或 0

ob_start();
echo "1x" . "<br />";
echo "2x" . "<br />";
echo "3x" . "<br />";
ob_flush();

总的来说,你的目标不是很明确。ob_start() 用于在发送之前清理一堆输出。它不应该用作堆栈。

如果您想在 PHP 中使用堆栈,请尝试使用SplStack 。

于 2009-06-15T06:42:59.453 回答
1

你为什么不写

echo "1x"."<br>";
echo "3x"."<br>";
echo "2x"."<br>";
于 2009-06-15T06:41:41.673 回答
1

以下情况如何:

<?php
echo ob_start();
echo "1x<br>";
$keep_me_1 = ob_get_contents(); /* optional and for later use */
echo ob_flush();

echo ob_start();
echo "3x<br>";
$keep_me_2 = ob_get_contents(); /* optional and for later use  */
echo ob_flush();

echo ob_start();
echo "3x<br>";
$keep_me_3 = ob_get_contents(); /* optional and for later use  */
echo ob_flush();

?>

如果你想使用更多的“堆栈”功能,你应该看看ob_end_flush.

于 2009-06-15T06:46:15.437 回答
0

您可以使用 ob_get_contents() 将内部缓冲区的内容保存为字符串,然后调用 ob_end_clean() 将内容丢弃。稍后,在外部缓冲区中使用回调函数来写出字符串。

于 2009-06-15T06:47:17.853 回答
0

你的问题是ob_*函数不应该被echo编辑。

<?
ob_start() . "<br>";
echo "1x<br>";
ob_start() . "<br>";
echo "2x<br>";
ob_flush() . "<br>";
echo "3x<br>";
ob_flush() . "<br>";
?>

ob_start()函数返回一个布尔值。因此,基本上,您的代码只是在回显一个true值,该值1转换为字符串时。

于 2015-05-13T13:31:50.600 回答