PHP 8.4.3 Released!

ob_end_flush

(PHP 4, PHP 5, PHP 7, PHP 8)

ob_end_flushVolcar (enviar) el búfer de salida y deshabilitar el almacenamiento en el mismo

Descripción

ob_end_flush(): bool

Esta función enviará el contenido del búfer de salida en cola (si existe) y los deshabilitará. Si fuera necesario procesar el contenido del búfer, se ha de llamar a ob_get_contents() antes que a ob_end_flush(), ya que el contenido del búfer es descartado después de llamar a ob_end_flush().

El búfer de salida debe estar iniciado por ob_start() con los indicadores PHP_OUTPUT_HANDLER_FLUSHABLE y PHP_OUTPUT_HANDLER_REMOVABLE Si no, ob_end_flush() no funcionará.

Nota: Esta función es similar a ob_get_flush(), excepto que ob_get_flush() devuelve el búfer como una cadena de caracteres.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error. Entre las posibles razones de un fallo se encuentra llamar a la función sin un búfer activo, o que por algún motivo no se pueda eliminar un búfer (posible en el caso de búferes especiales).

Errores/Excepciones

Si la función falla, genera un error de nivel E_NOTICE.

Ejemplos

Ejemplo #1 Ejemplo de ob_end_flush()

El siguiente ejemplo muestra una forma sencilla de volcar y finalizar todos los búferes de salida:

<?php
while (@ob_end_flush());
?>

Ver también

  • ob_start() - Activa el almacenamiento en búfer de la salida
  • ob_get_contents() - Devolver el contenido del búfer de salida
  • ob_get_flush() - Volcar el búfer de salida, devolverlo como una cadena de caracteres y deshabilitar el almacenamiento en el búfer de salida
  • ob_flush() - Vaciar (enviar) el búfer de salida
  • ob_end_clean() - Limpiar (eliminar) el búfer de salida y deshabilitar el almacenamiento en el mismo

add a note

User Contributed Notes 7 notes

up
13
jhannus at 128kb dot com
20 years ago
A note on the above example...

with PHP 4 >= 4.2.0, PHP 5 you can use a combination of ob_get_level() and ob_end_flush() to avoid using the @ (error suppresion) which should probably be a little faaster.

<?php

while (ob_get_level() > 0) {
ob_end_flush();
}

?>
up
9
nico (at) nokes.de
12 years ago
best way to compress a css code:

<?php
header
('Content-type: text/css');

ob_start("compress");
function
compress($buffer) {
// remove comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return
$buffer;
}

include(
'./template/main.css');
include(
'./template/classes.css');

<?
php
ob_end_flush
();
?>

Include in <head>:
<link rel="stylesheet" type="text/css" href="/design.php" media="all" />
up
2
anatoliy at miraline dot com
13 years ago
If you enable zlib.output_compression then level count will be increased by 1 and then this code:

<?php while (ob_get_level()) { ob_end_clean(); } ?>

will just freeze your script.
up
2
Mark
14 years ago
Wanted to speed things up and put some processing after the page has been delivered to the client. That drove me almost insane, but finally, I found a solution (php 5.2.5):

<?php
ob_start
(); // outer buffer
ob_start(); // inner buffer to catch URL rewrites and other post processing
session_start(); // registers URL rewriter with inner buffer!
echo '...';
// log performance data to log files *after* delivering the page!
register_shutdown_function(array($benchmarkclass,'log_perf_data'));
// now flush output output to client
ob_end_flush();
// need to calculate content length *after* URL rewrite!
header("Content-length: ".ob_get_length());
ob_end_flush();
// now we close the session and do some arbitrary clean-up tasks
// registered using register_shutdown_function()
session_write_close();
?>
up
1
skippy at zuavra dot net
19 years ago
Apart from being mostly redundant, ob_end_flush() can be downright damaging in some weird cases.

Actual example: a particular page on an Intranet website which would appear blank on Internet Explorer 6 when ob_start('ob_gzhandler') was called in the beginning and ob_end_flush() at the end.

We couldn't figure out what made that page special no matter what we tried. The ob_ functions were placed in scripts which were include()'d by all pages just the same, but only that page did this.

Even stranger, the problem only appeared on direct browser/server connections. Whenever the connection passed through a proxy the problem dissapeared. I'm guessing some kind of HTTP encoding headers mumbo-jumbo.

Solution: unless you really need it in particular cases, remove the ob_end_flush() call and rely on the builtin, automatic buffer flush.
up
1
brett at realestate-school dot com
22 years ago
It appears that you can call ob_end_flush() regardless of whether or not output buffering was ever started using ob_start(). This can prove useful because it saves you from having to create conditional statements based on whether a particular function or include file has started output buffering. You can simply call the ob_end_flush() anyway and if there's output in the buffer, it will be sent, otherwise your script will just keep on keepin' on.
up
0
Patrick
1 year ago
NOTE: In IIS, flushing the output buffer doesnt work until you add the following to your web.config file under the PHP handler:

responseBufferLimit="0"

I discovered this when I would only get SSE output when the script failed.
To Top