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.'&nbsp;</td>
</tr>
<tr>
<td>Apellido:</td>
<td>'.$apellido .'&nbsp;</td>
</tr>
<tr>
<td>Edad:</td>
<td>'.$edad .'&nbsp;</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.

Herramientas personales