> Manuales > Taller de PHP

Veamos otras funcionalidades interesantes del control de la salida en PHP, para trabajar con un buffer de salida. Eliminamos el buffer y ejecutamos funciones antes de mostrarlo.

Continuamos explorando algunas utilidades interesantes de PHP para realizar control de salida, a través de un buffer, para no enviar al cliente el código HTML generado por PHP hasta que el programador lo desee.

Este artículo continúa con otro anterior publicado en DesarrolloWeb.com: Control de salida en PHP.

Ahora vamos a aprender a eliminar o cancelar una salida almacenada en un buffer y a ejecutar funciones para realizar un procesamiento del código almacenado en un buffer antes de enviarlo al cliente. Para ello vamos a conocer nuevas funciones:

La función ob_clean() limpia el buffer de salida. Eso quiere decir que lo que tengamos en el bufer de salida se perderá.

La función ob_end_clean() sirve para limpiar el buffer de salida y además deshabilitarlo. Es decir, termina de trabajar con el bufer y además descarta todos los cambios que se hubieran incluido en el bufer.

También utilizaremos un parámetro que no habíamos visto de la función ob_start(parametro). Ese parámetro sirve para indicar el nombre de una función que será llamada antes de enviar el buffer de salida al cliente.

Veamos este código, que hace uso de las nuevas funciones y lo vamos explicando luego paso a paso.

<html>
<head>
   <title>Página procesada con buffer de salida</title>
</head>
<body>
<?
//inicio el buffer de salida
ob_start();

echo "hola!!! esto se va al buffer!";

//limpio el buffer de salida
ob_clean();

echo "Otra vez escribo!!";

//limpio el buffer de salida y lo deshabilito
ob_end_clean();

echo "Esto si que va a aparecer en la página<br>";

function convierte_caracteres_especiales($buffer){
   return htmlentities ($buffer);
}

//inicio el buffer de salida
ob_start("convierte_caracteres_especiales");

echo "Tenía que probar más cosas. Mañana espero que se lea con interés.";

ob_end_flush();
?>
</body>
</html>


Con ob_start(); iniciamos el buffering de la salida. A partir de ahora todo lo que se escriba en la página se guardará en el burffer. Por lo tanto, el siguiente echo "hola!!! esto se va al buffer!"; se guardará en el buffer.

Con la línea ob_clean(); se borra el contenido del bufer, por lo que la salida almacenada se pierde. Es decir, el echo anterior no se mostrará en la página.

El bufer, aunque recien limpiado, sigue activo. Por eso con el echo "Otra vez escribo!!";, el texto continuará insertándose en el bufer.

Luego con la línea ob_end_clean(); se borra el contenido del buffer y se deshabilita. Hemos perdido otra vez todo lo que se hubiera escrito en la página a partir del inicio de uso del buffer, así que el anterior echo no se mostrará.

En la siguiente línea hacemos un echo "Esto si que va a aparecer en la página<br>"; Como habíamos deshabilitado anteriormente el buffer con ob_end_clean(), ese texto se irá directo a la salida y llegará al navegador que ha solicitado la página.

Luego en el código vemos una declaración de una función:

function convierte_caracteres_especiales($buffer){
   return htmlentities ($buffer);
}

Esta función se va a utilizar para ejecutarla antes de enviar el buffer al cliente. Recibe un parámetro que es el buffer que se está procesando. Dentro de la función se pueden realizar acciones y se debe devolver un valor, que será lo que definitivamente se envíe al navegador del visitante.

Para decirle a PHP que se debe ejecutar esa función antes de enviar el bufer al cliente se debe iniciar el uso del bufer ob_start(parámetro), con el parámetro que es el nombre de la función, tal como se había comentado antes.

ob_start("convierte_caracteres_especiales");

El siguiente echo "Tenía que probar más cosas. Mañana espero que se lea con interés."; se coloca en el buffer. Y finalmente con ob_end_flush(); se envía el buffer al cliente.

Como al iniciar el bufer se había indicado un parámetro con el nombre de la función convierte_caracteres_especiales() se ejecutará esa función antes de enviar el contenido al cliente web.

En esa función simplemente se procesa el buffer, convirtiendo los caracteres especiales que tenga en sus correspondientes códigos especiales de HTML, con htmlentities().

Por tanto, el texto que se enviará al cliente es el texto que haya en el buffer después de ejecutar htmlentities().

Conclusión y resultado del control de salida de PHP

Para acabar, podemos ver el código que se generaría y se enviaría al cliente como resultado del procesamiento de esa página.

<html>
<head>
   <title>Página procesada con buffer de salida</title>
</head>
<body>
Esto si que va a aparecer en la página<br>&lt;br&gt;Ten&iacute;a que probar m&aacute;s cosas. Ma&ntilde;ana espero que se lea con inter&eacute;s.</body>
</html>

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual