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.
ob_get_length
(PHP 4 >= 4.0.2, PHP 5)
ob_get_length — Devolver la longitud del búfer de salida
Descripción
int ob_get_length
( void
)
Esta función devolverá la longitud de los contenidos en el búfer de salida.
Valores retornados
Devuelve la longitud de los contenidos del búfer de salida o FALSE si no está activo el uso de búferes de salida.
Ejemplos
Example #1 Un ejemplo sencillo de ob_get_length()
<?php
ob_start();
echo "Hola ";
$lon1 = ob_get_length();
echo "Mundo";
$lon2 = ob_get_length();
ob_end_clean();
echo $lon1 . ", ." . $lon2;
?>
El resultado del ejemplo seria:
5, 10
ob_get_length
stangelanda at arrowquick dot com
03-Aug-2007 05:36
03-Aug-2007 05:36
Sinured
11-Jul-2007 12:25
11-Jul-2007 12:25
> 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.
18-Jan-2007 10:49
Dude, your web server will compute Content-length for you!
rush at logic dot cz
02-Dec-2005 11:02
02-Dec-2005 11:02
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
prophp at gmail dot com
15-Oct-2005 08:56
15-Oct-2005 08:56
It's interesting how ob_start("ob_gzhandler"); or ob_gzhandler(); affect this function. The returned size is the buffer uncompressed size; therefore something like strlen(ob_get_contents()); just (hopefully) faster. However in order to obtain the compressed buffer size; there seem to be no function around.
Calin
webmaster at crescentart dot com
29-Jun-2001 10:58
29-Jun-2001 10:58
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();
?>
