PHP Conference Japan 2024

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 seconds to produce (%skb/sec)",
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 年前
如果您没有缓冲输出,那么 Web 服务器似乎无法输出 Content-Length 标头。对于静态文件,它可以检查文件大小,但对于逐小部分发送输出的动态文件,无法知道它将输出多少字节。并且必须在输出任何字节之前发送标头。

此外,如果您想知道 Content-Length 为什么很重要,浏览器会在脚本运行期间一直不会关闭连接。因此,如果您注册了耗时的关闭函数,浏览器仍将“旋转”等待更多内容,直到它们完成。(我不确定这是否在所有情况下都会发生,但我确定发送 Content-Length 始终可以防止这种情况。)

您可能会注意到,此手册页当前未输出任何 Content-Length 标头。

或者,使用 mb_strlen($output, 'latin1') 似乎可以确定字符串中的字节数。strlen 可能会也可能不会,具体取决于它是否已设置为多字节。
1
Sinured
17 年前
> 老兄,你的 Web 服务器会为你计算 Content-length!

我注意到 Apache 1.3 不会这样做。
但是,如果您运行的是 Apache 2.2(也许还有 2.0,还没有遇到过),则无需担心 Content-Length。
-5
webmaster at crescentart dot com
23 年前
这是一个获取 Content-Lenght 标头的简单方法。
<?
ob_start();
?>

放入 HTML 标签。

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