簡體   English   中英

PHP輸出緩沖區堆棧

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM