以下是没有达到我想要的目标
<?
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文档头部的标记。即,在脚本已经打印出需要提供的文档头信息之后,在脚本的一半处。
答案 0 :(得分:2)
请参阅ob_start的PHP手册。你不想
echo ob_start();
因为该函数返回true或false,所以它将输出1或0 代替
ob_start();
echo "1x" . "<br />";
echo "2x" . "<br />";
echo "3x" . "<br />";
ob_flush();
总的来说,你的目标不是很明确。 ob_start()用于在发送之前清理一堆输出。它不应该用作堆栈。
如果要在PHP中使用堆栈,请尝试SplStack。
答案 1 :(得分:1)
你为什么不写
echo "1x"."<br>";
echo "3x"."<br>";
echo "2x"."<br>";
答案 2 :(得分: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
。
答案 3 :(得分:0)
您可以使用ob_get_contents()将内部缓冲区的内容保存为字符串,然后调用ob_end_clean()将内容丢弃。稍后,在外部缓冲区中使用回调函数来写出字符串。
答案 4 :(得分: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
。