¿Qué es el almacenamiento en búfer de salida?


¿Qué es el almacenamiento en búfer de salida y por qué uno lo usa en PHP?

Author: Trilarion, 2010-05-14

5 answers

Búfer de salida para Desarrolladores Web, una Guía para Principiantes :

Sin búfer de salida (el predeterminado), su HTML se envía al navegador en trozos como procesos PHP a través de su script. Con el almacenamiento en búfer de salida, su HTML se almacena en una variable y se envía al navegador como una sola pieza al final de su script.

Ventajas del almacenamiento en búfer de salida para desarrolladores web

  • Activar el almacenamiento en búfer de salida solo disminuye la cantidad de tiempo que se tarda en descargue y renderice nuestro HTML porque no se envía al navegador por partes ya que PHP procesa el HTML.
  • Todas las cosas sofisticadas que podemos hacer con cadenas PHP, ahora podemos hacerlo con toda nuestra página HTML como una variable.
  • Si alguna vez ha encontrado el mensaje "Advertencia: No se puede modificar la información del encabezado - encabezados ya enviados por (salida)" al configurar las cookies, estará encantado de saber que el almacenamiento en búfer de salida es su respuesta.
 235
Author: ax.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-19 00:44:42

El búfer de salida es utilizado por PHP para mejorar el rendimiento y realizar algunos trucos.

  • Puede hacer que PHP almacene toda la salida en un búfer y genere toda la salida a la vez mejorando el rendimiento de la red.

  • Puede acceder al contenido del búfer sin enviarlo de vuelta al navegador en ciertas situaciones.

Considere este ejemplo:

<?php
    ob_start( );
    phpinfo( );
    $output = ob_get_clean( );
?>

El ejemplo anterior captura la salida en una variable en lugar de enviarla al navegador. output_buffering está desactivado de forma predeterminada.

  • Puede utilizar el almacenamiento en búfer de salida en situaciones en las que desee modificar encabezados después de enviar contenido.

Considere este ejemplo:

<?php
    ob_start( );
    echo "Hello World";
    if ( $some_error )
    {
        header( "Location: error.php" );
        exit( 0 );
    }
?>
 54
Author: Salman A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-15 06:39:34

Las funciones de control de salida le permiten para controlar cuándo se envía la salida desde script. Esto puede ser útil en varias situaciones diferentes, especialmente si necesita enviar encabezados al navegador después de que su script tiene comenzó a generar datos. salida Las funciones de control no afectan encabezados enviados usando header () o setcookie (), solo funciones como echo () y datos entre bloques de PHP codificar.

Http://php.net/manual/en/book.outcontrol.php

Más Recursos:

Búfer de Salida Con PHP

 9
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-14 06:14:06

As name suggest here memory buffer usado para administrar cómo aparece la salida del script.

Aquí hay uno muy buen tutorial para el tema

 4
Author: nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-14 06:19:58
ob_start();  // turns on output buffering
$foo->bar();  // all output goes only to buffer
ob_clean();  // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents();  // buffer content is now an empty string
ob_end_clean();  // turn off output buffering

Los búferes pueden anidarse, así que mientras un búfer está activo, otro ob_start() activa un nuevo búfer. Así que ob_end_flush () y ob_flush () no están realmente enviando el búfer a la salida, sino al búfer padre. Y solo cuando no hay búfer padre, el contenido se envía al navegador o al terminal.

Muy Bien explicado aquí: https://phpfashion.com/everything-about-output-buffering-in-php

 0
Author: sudip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 07:20:55