[英]PHP output buffer stacking
以下未達到我的期望
<?
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文檔的開頭。 也就是說,在腳本打印完文檔頭信息后,腳本需要完成一半,然后才能提供。
有關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 。
你為什么不寫
echo "1x"."<br>";
echo "3x"."<br>";
echo "2x"."<br>";
關於以下內容:
<?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
。
您的問題是, 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
值,當轉換為字符串時, true
值將轉換為1
。
您可以使用ob_get_contents()將內部緩沖區的內容保存為字符串,然后調用ob_end_clean()將其丟棄。 稍后,在外部緩沖區中使用回調函數來寫出字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.