ob_get_length() 方法有什么用?

What is the use of the ob_get_length() method?

我知道那些与输出缓冲相关的方法:

<?php
ob_start();

// some code

ob_end_flush();
ob_end_clean();

但我不明白为什么我需要输出缓冲区的长度。这里有一个问题是关于测量用户带宽的 SOF,尽管该计算将需要测量未解决的图片和其他文件。

我确实检查了 PHP 手册,但 "why" 不存在。

ob_get_length 将 return 输出缓冲区中内容的长度..

这是一个简单的例子..

<?php

ob_start();

echo "Hello ";

$len1 = ob_get_length();

echo "World";

$len2 = ob_get_length();

ob_end_clean();

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

上面的例子会输出:6, 11

更新: ob_get_length() 如果您想发送自定义 HTTP Content-Length header - 尽管这仅适用于高级用户!

正在回答 "why to use it"。要回答这个问题,首先要明白为什么要用ob_start。 通常它有两个用途:

  1. 当我们要发送 HTTP headers,但不确定,之前没有渲染(第一次输出会触发 header 发送,所以如果你使用,例如 echo,在 header,后面不行)
  2. 当我们想要按块发送输出以提高性能时。 (你的代码可以写很多 echoprint,而且它们通常只输出少量数据,所以你将一小部分数据发送回浏览器,这会影响性能。)

所以现在你可以开始猜了,为什么我们需要使用 ob_get_length()。例如:我想通过大块发送我的输出,所以我启用了输出缓冲,并且在 ob_get_length 的帮助下,我可以控制在发送之前我可以写入缓冲区的数据量。