2024 年 PHP 日本研討會

ob_get_contents

(PHP 4, PHP 5, PHP 7, PHP 8)

ob_get_contents返回輸出緩衝區的內容

說明

ob_get_contents(): 字串|false

取得輸出緩衝區的內容,但不清除它。

參數

此函式沒有參數。

傳回值

如果輸出緩衝區處於活動狀態,則返回輸出緩衝區的內容;否則返回 false

範例

範例 #1 一個簡單的 ob_get_contents() 範例

<?php

ob_start
();

echo
"Hello ";

$out1 = ob_get_contents();

echo
"World";

$out2 = ob_get_contents();

ob_end_clean();

var_dump($out1, $out2);
?>

上述範例會輸出

string(6) "Hello "
string(11) "Hello World"

另請參閱

新增註釋

使用者貢獻的註釋 4 則註釋

Mark Clements
10 年前
請注意,與有效利用記憶體的 PHP 變數不同,取得輸出緩衝區的內容會導致建立緩衝區的新副本。如果您的輸出很大,這最終可能會大幅增加腳本的記憶體需求。

範例程式碼

<?php

print(memory_get_usage() . "<br>");

ob_start();

for (
$i = 0; $i < 5000000; $i++)
print(
" ");

print(
memory_get_usage() . "<br>");

$foo = ob_get_contents();

print(
memory_get_usage() . "<br>");

ob_end_flush();

?>

輸出

351664
5359152
10359256
mauroasprea+php at gmail dot com
13 年前
這是堆疊如何運作的範例

<?php
//層級 0
ob_start();
echo
"Hello ";

//層級 1
ob_start();
echo
"Hello World";
$out2 = ob_get_contents();
ob_end_clean();

//回到層級 0
echo "Galaxy";
$out1 = ob_get_contents();
ob_end_clean();

//僅輸出
var_dump($out1, $out2);
?>
m227 (at) poczta.onet.pl
19 年前
如果您使用 ob_start 並以回呼函式作為參數,且該函式會更改 ob 字串(如同手冊中的範例),請別預期 ob_get_contents 會返回已更改的 ob。
它的運作方式如同您使用沒有任何參數的 ob_start。所以不要感到困惑。
DrDreistein at dontknow.at
13 年前
我做了一個簡單的測試,比較哪種方式更快:以正常方式添加一些文字,或透過 ob 堆疊。

<?php
$start
= microtime(true);
$var = '';
for(
$i=0 ; $i <= 1000000 ; $i++) {
$var .= ' ';
}
$middle = microtime(true);

ob_start();
for(
$i=0 ; $i <= 1000000 ; $i++) {
echo
' ';
}
$var = ob_get_contents();
ob_end_clean();

$end = microtime(true);

echo
$middle - $start;
echo
'<br />';
echo
$end - $middle;
?>

輸出類似以下的內容

0.33658003807068
0.30778789520264
To Top