2010-11-08 7 views
9

La documentación de php sugiere que debería terminar cada ob_start() con un ob_end_flush(). Estoy usando uno en cada página de un sitio, solo para permitirme usar los métodos de registro firephp en cualquier lugar de la aplicación.¿por qué necesito terminar mi ob_start()?

la aplicación funciona bien, pero me pregunto si hay algo que no sé que pueda ser perjudicial.

Respuesta

8

Creo que el motivo de esta sugerencia es que PHP vacía el búfer de salida implícitamente cuando no utiliza una de las funciones ob_end_*. Si bien no es un error, este puede causar problemas cuando no lo esperas. Los PHP-docs intentan protegerte de este tipo de problemas. Si conoce el color implícito, probablemente no sea un problema.

0

Puede utilizar el almacenamiento en búfer de salida como

<?php 
ob_start(); 
echo "Some text you want to echo on page!!"; 
header("Location:somepage.php"); 
ob_end_flush(); 
?> 

El problema es que no podemos enviar la cabecera después de que comience a enviar la salida. Para resolver esto, almacenamos la salida. La función ob_start activa el almacenamiento en búfer de salida. Mientras que el almacenamiento en búfer de salida está activo, no se envía salida del script (que no sean los encabezados), sino que el resultado se almacena en un búfer interno. Por lo tanto, la salida de eco se almacenará en el búfer. A continuación enviamos el encabezado sin ningún problema, ya que aún no hemos escupido ningún resultado. Finalmente, llamamos a ob_end_flush para vaciar el contenido del buffer interno y detener el buffer de salida.

0

si hay bucles, por ejemplo, alguien puede iniciar el almacenamiento en búfer. Y llama a tu función. Cuando intenta ob_end_flush, el código recopila tus contenidos.

Cuestiones relacionadas