2024 年日本 PHP 研討會

ob_get_length

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

ob_get_length傳回輸出緩衝區的長度

說明

ob_get_length(): int|false

此函式將會以位元組為單位傳回輸出緩衝區中內容的長度。

參數

此函式沒有參數。

傳回值

返回輸出緩衝區內容的長度(以位元組為單位),如果沒有啟用緩衝,則返回 false

範例

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

<?php

ob_start
();

echo
"Hello ";

$len1 = ob_get_length();

echo
"World";

$len2 = ob_get_length();

ob_end_clean();

echo
$len1 . ", " . $len2;
?>

上述範例將輸出

6, 11

另請參閱

新增筆記

使用者貢獻的筆記 5 則筆記

7
Nitrogen
15 年前
因為我的網站是從家裡的電腦執行的,所以我使用這個函式在我的頁面中產生一個小型速度測試。

<?php
ob_start
();
$StartTime=microtime(1);
?>
.. 網頁資料放在這裡 ..

<?php
// 頁尾?
printf("%s 秒產生 (%skb/秒)",
microtime(1)-$StartTime,
Round((ob_get_length()/(microtime(1)-$StartTime))/1024));

ob_end_flush();
?>

注意:「速度」取決於實際產生內容的速度,而不是資料傳送到客戶端的速度。
不過,如果能有這樣的函式來獲取真實速度就太好了 :)

Nitrogen.
7
rush at logic dot cz
19 年前
當您需要取得 gz 壓縮後緩衝區的長度時,有一個解決方法。

ob_start();
ob_start('ob_gzhandler');

... 輸出頁面內容...

ob_end_flush(); // ob_gzhandler 的那一個

header('Content-Length: '.ob_get_length());

ob_end_flush(); // 主要的那一個

更多資訊請參考 http://www.edginet.org/techie/website/http.html
2
stangelanda at arrowquick dot com
17 年前
如果您不緩衝輸出,網頁伺服器似乎就無法輸出 Content-Length 標頭。對於靜態檔案,它可以檢查檔案大小,但對於一點一點地發送輸出的動態檔案,就無法知道它將輸出多少位元組。而且標頭必須在輸出任何位元組之前發送。

另外,如果您想知道為什麼 Content-Length 很重要,那是因為只要腳本仍在執行,瀏覽器就不會關閉連線。因此,如果您註冊了耗時的關閉函式,瀏覽器仍會「轉圈」等待更多內容,直到它們完成。(我不確定這種情況在所有條件下都會發生,但我確定發送 Content-Length 總是可以防止這種情況。)

您可能會注意到此說明頁面目前沒有輸出任何 Content-Length 標頭。

或者,使用 mb_strlen($output, 'latin1') 似乎可以計算字串中的位元組數。 strlen 的結果則取決於它是否已設定為多位元組模式。
1
Sinured
17 年前
> 老兄,你的網頁伺服器會幫你計算 Content-length!

我注意到 Apache 1.3 並不會這樣做。
但是,如果您執行的是 Apache 2.2(也可能是 2.0,我還沒試過),您就不需要擔心 Content-Length。
-5
webmaster at crescentart dot com
23 年前
這是一個取得 Content-Length 標頭的簡單方法。
<?
ob_start();
?>

放置 HTML 標籤。

<?
$size=ob_get_length();
header("Content-Length: $size");
ob_end_flush();
?>
To Top