代码之家  ›  专栏  ›  技术社区  ›  Jase Whatson

PHP输出缓冲区堆叠

  •  0
  • Jase Whatson  · 技术社区  · 17 年前

    以下内容并没有达到我的愿望

    <?
    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文档头部所需的标记。也就是说,在脚本完成一半的时候,它已经打印了文档头信息,然后提供所需的信息。

    5 回复  |  直到 12 年前
        1
  •  2
  •   Jack B Nimble    17 年前

    有关详细信息,请参阅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()用于在发送前清理一组输出。它不应该用作堆栈。

    尝试 SplStack 如果你想在PHP中使用堆栈。

        2
  •  1
  •   jitter    17 年前

    你为什么不直接写呢

    echo "1x"."<br>";
    echo "3x"."<br>";
    echo "2x"."<br>";
    
        3
  •  1
  •   merkuro    17 年前

    那么下面呢:

    <?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 .

        4
  •  0
  •   UncleO    17 年前

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

        5
  •  0
  •   Elvex    11 年前

    你的问题是 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 当转换为字符串时。

    推荐文章