略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: ob_get_length

2024-12-22

ob_get_length

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

ob_get_length返回输出缓冲区内容的长度

说明

ob_get_length(): int

此函数将返回输出缓中冲区内容的长度。

返回值

返回输出缓冲区内容的长度;或者返回false——如果没有起作用的缓冲区。

范例

示例 #1 A simple ob_get_length() example

<?php

ob_start
();

echo 
"Hello ";

$len1 ob_get_length();

echo 
"World";

$len2 ob_get_length();

ob_end_clean();

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

以上例程会输出:

6, 11

参见

add a noteadd a note

User Contributed Notes 5 notes

up
7
Nitrogen
13 years ago
I use this function to produce a small speed test in my pages since I run my website from my home computers.

<?php
ob_start
();
$StartTime=microtime(1);
?>
.. webpage data goes here ..

<?php
// footer?
printf("%s seconds to produce (%skb/sec)",
 
microtime(1)-$StartTime,
 
Round((ob_get_length()/(microtime(1)-$StartTime))/1024));

ob_end_flush();
?>

Note: don't forget the "speed" depends on how quick the content is actually generated and not on the speed the data is sent to the client..
However it would be good to see such function to get the real speed. :)

Nitrogen.
up
7
rush at logic dot cz
16 years ago
There is a work-around for the situation you need to get length of the gz-ed buffer.

ob_start();
ob_start('ob_gzhandler');

  ... output the page content...

ob_end_flush();  // The ob_gzhandler one

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

ob_end_flush();  // The main one

more info at http://www.edginet.org/techie/website/http.html
up
2
stangelanda at arrowquick dot com
14 years ago
If you don't buffer your output, it doesn't seem like it would be possible for a web server to output a Content-Length header.  For static files it can check the filesize, but for dynamic files that send output a little by little there is no way to know how many bytes it is going to output.  And the headers have to be sent before a single byte is output.

Also if you're wondering why the Content-Length is important, the browser doesn't close the connection as long as the script is running.  So if you register time consuming shutdown functions, the browser will still 'spin' waiting for more content until they complete.  (I'm not sure this happens under all conditions, but I am certain the sending the Content-Length always prevents this.)

You might take note that this manual page does not currently output any Content-Length header.

Alternatively using mb_strlen($output, 'latin1') seems to work to determine bytes in a string.  strlen may or may not depending on if it has been set up as a multibyte or not.
up
1
Sinured
14 years ago
> Dude, your web server will compute Content-length for you!

I've noticed that Apache 1.3 doesn't do that.
However, if you’re running Apache 2.2 (and maybe 2.0, haven't experienced that yet) you don't need to worry about Content-Length.
up
-4
webmaster at crescentart dot com
20 years ago
Here is an easy way to get the header Content-Lenght.
<?
ob_start();
?>

Put HTML tags.

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

官方地址:https://www.php.net/manual/en/function.ob-get-length.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3