Forum und email

ob_start

(PHP 4, PHP 5)

ob_start — Habilitar el uso de búferes de salida

Descripción

bool ob_start ([ callback $llamada_de_retorno_salida [, int $tamanyo_segmento [, bool $borrar ]]] )

Esta función habilitará el uso de búferes de salida. Mientras los búferes de salida están activos no se envía salida desde el script (más que las cabeceras), en su lugar la salida es almacenada en un búfer interno.

Los contenidos de este búfer interno pueden ser copiados a una variable de cadena usando ob_get_contents(). Para producir la salida de lo que está almacenado en el búfer interno, use ob_end_flush(). Alternativamente, ob_end_clean() descartará silenciosamente los contenidos del búfer.

Warning

Algunos servidores web (p.ej. Apache) modifican el directorio de trabajo de un script cuando se ejecuta la llamada de retorno. Es posible modificarlo de vuelta p.ej. mediante chdir(dirname($_SERVER['SCRIPT_FILENAME'])) en la llamada de retorno.

Los búferes de salida pueden apilarse, es decir, es posible llamar ob_start() mientras que otro ob_start() está activo. Simplemente asegúrese de llamar ob_end_flush() el número apropiado de veces. Si múltiples llamadas de retorno están acivas, la salida es filtrada secuencialmente a través de cada una de ellas en orden de anidamiento.

Lista de parámetros

llamada_de_retorno_salida

Es posible especificar una función opcional llamada_de_retorno_salida . Esta función recibe una cadena como parámetro y debe devolver una cadena. La función será llamada cuando se llame ob_end_flush(), o cuando el búfer de salida sea volcado al navegador al final de la petición. Cuando se llama output_callback , éste recibirá los contenidos del búfer de salida como su parámetro y se espera que devuelva un nuevo búfer de salida como resultado, valor que será enviado al navegador. Si la llamada_de_retorno_salida no es una función que pueda llamarse, se devolverá FALSE.

Si la llamada de retorno tiene dos parámetros, el segundo parámetro es llenado con un campo de bits consistente de PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT y PHP_OUTPUT_HANDLER_END.

Si llamada_de_retorno_salida devuelve FALSE, la entrada original es enviada al navegador.

El parámetro llamada_de_retorno_salida puede evitarse pasando el valor NULL.

No deben llamarse ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() ni ob_start() desde una llamada de retorno. De hacerse, el comportamiento es indefinido. Si desea eliminar los contenidos de un búfer, devuelva "" (una cadena nula) desde la llamada de retorno. No es posible siquiera llamar funciones que usen el mecanismo de búferes de salida como print_r($expresion, true) o highlight_file($nombre_archivo, true) desde una llamada de retorno.

Note: En PHP 4.0.4 se introdujo ob_gzhandler() para facilitar el envío de datos codificados con el algoritmo gz a navegadores web con soporte para páginas web comprimidas. ob_gzhandler() determina el tipo de contenido que aceptará el navegador y devolverá su salida acordemente.

tamanyo_segmento

Si se pasa el parámetro opcional tamanyo_segmento , la llamada de retorno es ejecutada en cada primera nueva línea después de tamanyo_segmento bytes de salida. El valor predeterminado 0 quiere decir que la función es llamada únicamente al final, el otro valor especial 1 define tamanyo_segmento a 4096.

borrar

Si el parámetro opcional borrar es definido como FALSE, el búfer no será eliminado hasta que el script finalice (a partir de PHP 4.3.0).

Valores retornados

Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.

Registro de cambios

Versión Descripción
4.3.2 Esta función cambió para devolver FALSE en caso de que llamada_de_retorno_salida no pudiera ejecutarse.

Ejemplos

Example#1 Ejemplo de una llamada de retorno del usuario

<?php

function llamada_retorno($bufer)
{
  
// reemplazar todas las manzanas con naranjas
  
return (str_replace("manzanas""naranjas"$bufer));
}

ob_start("llamada_retorno");

?>
<html>
<body>
<p>Es como comparar manzanas con naranjas.</p>
</body>
</html>
<?php

ob_end_flush
();

?>

El resultado del ejemplo seria:

<html>
<body>
<p>Es como comparar naranjas con naranjas.</p>
</body>
</html>