PHP: ¿Qué es y para que sirve el Control de Salida?
De Foros del Web
Esto puede resultar útil por ejemplo para trabajar con con funciones que deben ser ejecutadas utilizando datos que se han "salido", pero deben ser ejecutadas sin que se haya enviado ninguna como setcookie() o header(). A continuación haremos un script para tratar de explicar como el control de salida puede servirnos. Lo que el script hace es tomar unas variables definidas por nosotros, o por qué no, provenientes de algún formulario; realizar una salida determinada utilizando estos datos, transformar esa salida es una variable y enviarla como mensaje en un mail.
.mandar.php
Código PHP:
<?php ob_start(); /* La Funcion "ob_start()" hace que todos los datos que se empiezan a emitir queden guardados en un "buffer" y mientras este este "on" so se envían salidas del script Declaremos algunas variables para el ejemplo */ $nombre="Pepito"; $apellido="Comilon"; $edad=48; $para="pepito_comilon@hotmail.com"; echo '<html> <head> <title>Vulcar with Output Control and Mail() function</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <table width="500" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td>Nombre:</td> <td>'.$nombre.' </td> </tr> <tr> <td>Apellido:</td> <td>'.$apellido .' </td> </tr> <tr> <td>Edad:</td> <td>'.$edad .' </td> </tr> <tr> <td colspan="2">Se le ah enviado un mail a su correo electronico: '.$para.' con el contenido de esta pagina</td> </tr> </table> </body> </html>'; $todo=ob_get_contents(); ob_end_clean(); echo $todo; /* la función "ob_get_contents()" devuelve todo salida provocada por el script. La función "ob_end_clean()" da por terminado el almacenamiento ("off") de datos y los elimina. Si no se especifica como debe finalizar el buffer del script por defecto se "agrega" "ob_end_flush()" Fíjense que curioso lo que pasa cuando el "echo $todo" se coloca antes que el ob_end_clean() y que sucede cuando este no está. Podríamos no realizar el echo y usar la función mail, luego ob_end_clean() y luego un header("Location:algo.php") pero esto es solo un ejemplo :P Ahora mandamos el mail Definamos algunas variables:*/ $de="manolo_comilon@hotmail.com"; $tema="Tengo Tus Datos Aqui"; $mensaje=$todo; $headers="From:".$de."\nReply-To:".$de."\n Mime-Version: 1.0\n Content-Type: text/html\n"; @mail($para,$tema,$mensaje,$headers); ?>
Para el ejemplo anterior utilizamos un función escencial para el funcionamiento del script "ob_get_contents()" pero esa no es la única función que veremos, en el ejemplo siguiente usaremos "ob_get_length()" que nos devuelve la longitud de contenidos almacenados dentro del buffer.
.peso.php
Código PHP:
<?php ob_start(); ?> <html> <head> <title>Ejemplo de ob_get_length()</title> </head> <body> ALGUN TEXTO PARA HACER PESO NUMAS :P<br> <?php $peso=(ob_get_length()/1024); printf ("La pagina pesa: %01.2f Kbytes aproximadamente ", $peso); /*Nótese que ob_end_flush es obviado pero pero el escript funciona igual*/ ?> </body> </html>
Acabamos de ver como utilizar una función de control de salida para calcular el peso de la página, este no es exacto porque no se tiene en cuenta el peso de los caracteres posteriores a "ob_get_length" y si usamos este código al final, de la página a la cual le queremos medir, el peso estos últimos caracteres es casi despreciable.
--Nefertiter 07 Nov 2004
Este artículo es parte de las FAQs de PHP y el Manual de PHP.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
