(PHP 4, PHP 5)
ob_start — Activa el almacenamiento en búfer de salida
Esta función activará el almacenamiento en búfer de salida. Mientras dicho almacenamiento esté activo, no se enviará ninguna salida desde el script (aparte de cabeceras), en su lugar la salida se almacenará en un búfer interno.
El contenido de este búfer interno se puede copiar a una variable de tipo string usando ob_get_contents(). Para producir la salida de lo almacenado en el búfer interno se ha de usar ob_end_flush(). De forma alternativa, ob_end_clean() desechará de manera silenciosa el contenido del búfer.
Algunos servidores web (p.ej. Apache) cambian en directorio de trabajo de un script cuando se invoca a la función de llamada de retorno. Se puede cambiar de nuevo mediante, por ejemplo, chdir(dirname($_SERVER['SCRIPT_FILENAME'])) en la función de llamada de retorno.
Los búferes de salida son apilables, es decir, que se podría llamar a ob_start() mientras otro ob_start() esté activo. Se ha de asegurar llamar a ob_end_flush() las veces apropiadas. Si están activas múltiples funciones de llamada de retorno de salida, la salida se filtrará secuencialmente por cada una de ellas en orden de anidamiento.
output_callback
Se puede especificar una función output_callback
opcional. Esta función toma un string como parámetro y debería
devolver otro string. La función se llamará cuando
el búfer de salida sea volcado (enviado), limpiado (con
ob_flush(), ob_clean() o alguna función
similar) o cuando el búfer de salida
sea volcado al navegador al final de la petición. Cuando se llame a
output_callback
, ésta recibirá el
contenido del búfer de salida como su propio parámetro, y se espera que
devuelva un nuevo búfer de salida como resultado, que será enviado al
navegador. Si output_callback
no es una
función llamable, esta función devolverá FALSE
.
Si la función de llamada de retorno tiene dos parámetros, el segundo se
rellena con un campo de bits que consiste en constantes
PHP_OUTPUT_HANDLER_*
.
Si output_callback
devuelve FALSE
, se enviará la
entrada original al navegador.
El parámetro output_callback
se puede omitir
pasando un valor NULL
.
ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() y ob_start() no se pueden llamar desde una función de llamada de retorno. Si se hace, el comportamiento no estará definido. Si se quiere borrar el contenido de un búfer, se ha de devolver "" (un string nulo) desde la función de llamada de retorno. Tampoco se pueden llamar a funciones usando las funciones de búfer de salida como print_r($expresión, true) o highlight_file($nombre_fichero, true) desde una función de llamada de retorno.
Nota:
En PHP 4.0.4, ob_gzhandler() se introdujo para facilitar el envío de datos codificados con gz a los navegadores web que admitan páginas web comprimidas. ob_gzhandler() determima el tipo de codificación de contenido que aceptará el navegador y devolverá su salida en consecuencia.
chunk_size
Si se proporciona el parámetro opcional chunk_size
, el
búffer será volcado después de cualquier llamada de salida que cause que la longitud
del búfer sea igual o exceda a chunk_size
. El valor
predeterminado 0 significa que la función de salida será llamada
únicamente cuando el búfer de salida se cierre.
Antes de PHP 5.4.0, el valor 1 era un caso especial que establecía el tamaño de segmento a 4096 bytes.
erase
Si el parámetro opcional erase
se establece a FALSE
,
el búfer no será borrado hasata que el script finalice.
Esto ocasiona que las funciones de volcado y limpieza emitirán un aviso
y devuelvan FALSE
si se las invoca.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
Versión | Descripción |
---|---|
5.4.0 | Un tamaño de segmento de 1 ahora resulta en segmentos de 1 byte que se van a enviar al búfer de salida. |
4.3.2 |
Se modficó esta función para devolver FALSE en caso de que la función
output_callback pasada no podía ejecutarse.
|
4.2.0 |
Se añadió el parámetro erase .
|
Ejemplo #1 Ejemplo de una función de llamada de retorno definida por el usuario
<?php
function callback($búfer)
{
// reemplazar todas las manzanas por naranjas
return (str_replace("manzanas", "naranjas", $búfer));
}
ob_start("callback");
?>
<html>
<body>
<p>Es como comparar manzanas con naranjas.</p>
</body>
</html>
<?php
ob_end_flush();
?>
El resultado del ejemplo sería:
<html> <body> <p>Es como comparar naranjas con naranjas.</p> </body> </html>