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 个注释

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。
rush at logic dot cz
18 年前
对于您需要获取 gzip 缓冲区长度的情况,存在一种变通方法。

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
stangelanda at arrowquick dot com
17 年前
如果您不缓冲输出,那么似乎 Web 服务器不可能输出 Content-Length 标头。对于静态文件,它可以检查文件大小,但是对于动态文件,它们一点一点地发送输出,没有办法知道它将输出多少字节。并且标头必须在输出单个字节之前发送。

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

您可能注意到,此手册页面目前没有输出任何 Content-Length 标头。

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

我注意到 Apache 1.3 不会这样做。
但是,如果您运行的是 Apache 2.2(以及可能 2.0,还没有遇到过这种情况),您不必担心 Content-Length。
webmaster at crescentart dot com
23 年前
这是一个获取 Content-Length 标头的简单方法。
<?
ob_start();
?>

放置 HTML 标签。

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