domingo, 16 de noviembre de 2014

[PHP]Control de salida

Por defecto, todo lo que se imprime en un script en PHP o cualquier HTML fuera de las etiquetas PHP (incluso al incluir archivos) se envia inmediatamente al navegador. 

El almacenamiento en buffer de salida (o control de salida, como el manual de PHP lo llama) es una caracteristica de PHP que anula este comportamiento. En lugar de enviar inmediatamente HTML al navegador web, la salida se colocara en el buffer - memoria temporal. Entonces, cuando el buffer se vacia, se envia al navegador web. Alli puede ser una mejora de rendimiento con el almacenamiento de buffer de salida, pero el principal beneficio es que se erradica esas molestas cabeceras "headers already sent". Algunas funciones header(), setcookie(), y session_start() - solo se pueden llamar si nada ha sido enviado al navegador. 

Con el almacenamiento en buffer de salida nada se enviara al navegador web hasta el final de la pagina, por lo que es libre de llamar a estas funciones en cualquier punto del script.

Para comenzar el almacenamiento de buffer de salida, invocamos la funcion ob_start(), una vez que usted lo llama, la salida de cada echo, print, y funciones similares llamadas seran enviadas al buffer de memoria en lugar del navegador web. Por el contrario, las cabeceras HTTP (como header() y setcookie()) no se almacenaran y funcionaran como de costumbre. Como conclusion del script, llamar a la funcion ob_end_flush() para enviar el buffer acumulado al navegador web. O bien, utilice la funcion ob_end_clean() para eliminar los datos almacenados sin enviarlos. Ambas funciones tienen efectos secundarios de desactivar el almacenamiento de buffer de salida. 

Un ejemplo de todo esto podria ser el siguiente:

 <?php
 ob_start();
 echo "Hola Mundo\n";
 setcookie("MiCookie","ASDF");
 ob_end_flush();
?>



En las versiones mas recientes de PHP, el almacenamiento en buffer de salida esta activado por defecto, el tamaño del buffer - el maximo numero de bytes almacenados en memoria - es 4,096, pero esto se puede cambiar en el archivo de configuracion en PHP. 

La funcion ob_get_contents() devolvera el buffer de modo que se puede asignar a una variable, en caso de necesidad.

La funcion ob_flush() enviara el contenido actual de la memoria al navegador web y luego lo desechara, lo que permite iniciarse un nuevo buffer. Esta funcion permite que los scripts mantengan tamaño de buffer mas moderados. Por el contrario ob_end_flush() apaga el almacenamiento del buffer de salida despues de enviar el buffer al navegador web. 

La funcion ob_clean() borra el contenido actual de la memoria sin detener el proceso de buffer.

PHP ejecutara automaticamente al final de la secuencia ob_end_flush() al final del script si no se hace lo contrario.

No hay comentarios:

Publicar un comentario