<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.outcontrol.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'outcontrol.user-level-output-buffers.php',
    1 => 'B&uacute;feres de salida a nivel de usuario',
    2 => 'B&uacute;feres de salida a nivel de usuario',
  ),
  'up' => 
  array (
    0 => 'book.outcontrol.php',
    1 => 'Control de la visualizaci&oacute;n',
  ),
  'prev' => 
  array (
    0 => 'outcontrol.flushing-system-buffers.php',
    1 => 'Vaciar los b&uacute;feres del sistema',
  ),
  'next' => 
  array (
    0 => 'outcontrol.what-output-is-buffered.php',
    1 => '&iquest;Qu&eacute; salida est&aacute; bufferizada?',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/outcontrol/user-level-output-buffers.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/outcontrol.user-level-output-buffers.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="outcontrol.user-level-output-buffers" class="chapter">
 <h1 class="title">Búferes de salida a nivel de usuario</h1>
<h2>Tabla de contenidos</h2><ul class="chunklist chunklist_chapter"><li><a href="outcontrol.what-output-is-buffered.php">&iquest;Qu&eacute; salida est&aacute; bufferizada?</a></li><li><a href="outcontrol.nesting-output-buffers.php">Anidamiento de b&uacute;feres de salida</a></li><li><a href="outcontrol.buffer-size.php">Tama&ntilde;o del b&uacute;fer</a></li><li><a href="outcontrol.operations-on-buffers.php">Operaciones permitidas en los b&uacute;feres</a></li><li><a href="outcontrol.output-handlers.php">Gestores de salida</a></li><li><a href="outcontrol.working-with-output-handlers.php">Trabajar con los gestores de salida</a></li><li><a href="outcontrol.flags-passed-to-output-handlers.php">Flags pasados a los gestores de salida</a></li><li><a href="outcontrol.output-handler-return-values.php">Valores de retorno de los gestores de salida</a></li></ul>

 <p class="para">
  La bufferización de salida a nivel de usuario de PHP puede iniciarse, manipularse
  y finalizar desde el código PHP.
  Cada uno de estos búferes incluye un búfer de salida
  y una función de gestión de salida asociada.
 </p>

 

 <div class="section">
  <h2 class="title">Iniciar un búfer de salida</h2>
  <p class="para">
   Los búferes de salida a nivel de usuario pueden iniciarse
   utilizando la función <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> o definiendo
   los parámetros <a href="outcontrol.configuration.php#ini.output-buffering" class="link">output_buffering</a>
   y <a href="outcontrol.configuration.php#ini.output-handler" class="link">output_handler</a> de <var class="filename">php.ini</var>.
   Tanto uno como otro pueden crear búferes de salida,
   <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> es más flexible
   ya que acepta funciones definidas por el usuario como gestores de salida
   y las operaciones permitidas en el búfer (flush, clean, remove)
   pueden definirse también.
   Los búferes de salida iniciados con <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> estarán activos
   a partir de la línea donde se llamó a la función,
   mientras que los iniciados con
   <a href="outcontrol.configuration.php#ini.output-buffering" class="link">output_buffering</a>
   bufferizarán la salida desde la primera línea del script.
  </p>
  <p class="para">
   PHP también incluye un gestor de salida interno <code class="literal">&quot;URL-Rewriter&quot;</code>
   que inicia su propio búfer de salida y solo permite dos instancias del mismo
   funcionando al mismo tiempo
   (una para la reescritura de URL a nivel de usuario
   y otra para el soporte transparente de identificadores de sesión).
   Estos búferes pueden iniciarse llamando
   a la función <span class="function"><a href="function.output-add-rewrite-var.php" class="function">output_add_rewrite_var()</a></span>
   y/o activando el parámetro
   <a href="session.configuration.php#ini.session.use-trans-sid" class="link">session.use_trans_sid</a>
   de <var class="filename">php.ini</var>.
  </p>
  <p class="para">
   La extensión <code class="literal">zlib</code> tiene su propio búfer de salida
   que puede activarse utilizando el parámetro
   <a href="zlib.configuration.php#ini.zlib.output-compression" class="link">zlib.output_compression</a>
   de <var class="filename">php.ini</var>.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Mientras que <code class="literal">&quot;URL-Rewriter&quot;</code> es especial
    en cuanto a que solo permite dos instancias del mismo funcionando al mismo tiempo,
    todos los búferes de salida a nivel de usuario utilizan los mismos búferes subyacentes
    usados por <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span>
    con su funcionalidad implementada por una función de gestión de salida personalizada.
    Como tal, toda su funcionalidad puede emularse con código de usuario.
   </span>
  </p></blockquote>
 </div>

 

 

 

 <div class="section">
  <h2 class="title">Lavar, acceder y limpiar el contenido del búfer</h2>
  <p class="para">
   Lavar envía y elimina el contenido del búfer activo.
   Los búferes de salida se lavan cuando el tamaño de la salida
   excede el tamaño del búfer, el script finaliza o
   se llama a <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>, <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>,
   o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Llamar a <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>
    o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span> desactivará el búfer activo.
   </p>
  </div>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Lavar los búferes lavará el valor de retorno del gestor de salida
    que puede diferir del contenido del búfer.
    Por ejemplo, usar <span class="function"><a href="function.ob-gzhandler.php" class="function">ob_gzhandler()</a></span> comprimirá
    la salida y lavará la salida comprimida.
   </p>
  </div>
  <p class="para">
   El contenido del búfer activo puede recuperarse llamando
   a <span class="function"><a href="function.ob-get-contents.php" class="function">ob_get_contents()</a></span> o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>.
  </p>
  <p class="para">
   Si solo se necesita la longitud del contenido del búfer,
   <span class="function"><a href="function.ob-get-length.php" class="function">ob_get_length()</a></span> o <span class="function"><a href="function.ob-get-status.php" class="function">ob_get_status()</a></span>
   devolverá la longitud del contenido en bytes.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Llamar a <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>
    o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span> desactivará el búfer activo
    después de devolver su contenido.
   </p>
  </div>
  <p class="para">
   El contenido del búfer activo puede limpiarse llamando
   a <span class="function"><a href="function.ob-clean.php" class="function">ob_clean()</a></span>, <span class="function"><a href="function.ob-end-clean.php" class="function">ob_end_clean()</a></span>
   o <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Llamar a <span class="function"><a href="function.ob-end-clean.php" class="function">ob_end_clean()</a></span>
    o <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span> desactivará el búfer activo.
   </p>
  </div>
 </div>

 <div class="section">
  <h2 class="title">Desactivar los búferes</h2>
  <p class="para">
   Los búferes de salida pueden desactivarse llamando
   a <span class="function"><a href="function.ob-end-clean.php" class="function">ob_end_clean()</a></span>, <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>,
   <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span> o <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>.
  </p>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Los búferes de salida iniciados sin el flag
    <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-removable">PHP_OUTPUT_HANDLER_REMOVABLE</a></code></strong>
    no pueden desactivarse y generarán un <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>.
   </p>
  </div>
  <p class="para">
   Cada búfer de salida que no haya sido desactivado al final del script
   o cuando se llama a <span class="function"><a href="function.exit.php" class="function">exit()</a></span> será lavado
   y desactivado por el proceso de terminación de PHP.
   Los búferes se lavarán y desactivarán en orden inverso
   a su inicio.
   El último búfer iniciado será el primero,
   el primer búfer iniciado será el último en lavarse y desactivarse.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    Si no se desea el lavado del contenido del búfer,
    debe usarse un gestor de salida personalizado para evitar el lavado al cerrar.
   </p>
  </div>
 </div>

 

 

 

 

 <div class="section">
  <h2 class="title">Excepciones lanzadas en los gestores de salida</h2>
  <p class="para">
   Si una excepción no capturada es lanzada en un gestor de salida
   el programa termina y el gestor es invocado
   por el proceso de terminación después de lo cual
   se devuelve el mensaje de error <code class="literal">&quot;Excepción no capturada&quot;</code>.
  </p>
  <p class="para">
   Si la excepción no capturada es lanzada en un gestor
   invocado por <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>,
   <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span> o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
   el contenido del búfer se lava antes del mensaje de error.
  </p>
  <p class="para">
   Si una excepción no capturada es lanzada en un gestor de salida durante la terminación,
   el gestor termina y ni el contenido del búfer ni
   el mensaje de error son lavados.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Si un gestor lanza una excepción
    su flag <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> está definido.
   </span>
  </p></blockquote>
 </div>

 <div class="section">
  <h2 class="title">Errores generados en los gestores de salida</h2>
  <p class="para">
   Si un error no fatal es generado en un gestor de salida
   el programa continúa su ejecución.
  </p>
  <p class="para">
   Si un error no fatal es generado en un gestor invocado por
   <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>, <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>
   o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
   el búfer vacía algunos datos dependiendo del valor de retorno del gestor.
   Si el gestor devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> el búfer y el mensaje de error son lavados.
   Si el gestor devuelve otra cosa, el valor de retorno del gestor es lavado
   pero no el mensaje de error.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Si un gestor devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
    su flag <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> está definido.
   </span>
  </p></blockquote>
  <p class="para">
   Si un error fatal es generado en un gestor de salida
   el programa termina y el gestor es invocado
   por el proceso de terminación después de lo cual el mensaje de error es lavado.
  </p>
  <p class="para">
   Si el error fatal es generado en un gestor invocado por
   <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>, <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>
   o <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
   el contenido del búfer es lavado antes del mensaje de error.
  </p>
  <p class="para">
   Si un error fatal es generado en un gestor de salida durante la terminación
   el programa termina sin lavar el contenido del búfer o el mensaje de error.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Salida en los gestores de salida</h2>
  <p class="para">
   En circunstancias específicas, la salida producida en el gestor es lavada
   con el contenido del búfer.
   Esta salida no se añade al búfer y no forma parte de la cadena
   devuelta por <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>.
  </p>
  <p class="para">
   Durante las operaciones de lavado de búfer (llamada a <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>,
   <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>, <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>
   y durante la terminación)
   si el valor de retorno de un gestor es <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
   el contenido del búfer es lavado seguido de la salida.
   Si el gestor no es invocado durante la terminación
   el gestor lanzando una excepción o la llamada a <span class="function"><a href="function.exit.php" class="function">exit()</a></span>
   resulta en el mismo comportamiento.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Si un gestor devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
    su flag <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> está definido.
   </span>
  </p></blockquote>
 </div>

 <div class="section">
  <h2 class="title">Flags de estado de los gestores de salida</h2>
  <p class="para">
   Los
   <a href="outcontrol.constants.php#outcontrol.constants.flags-returned-by-handler" class="link">
    flags de estado de los gestores
   </a> de la máscara de bits <code class="literal">flags</code> del búfer
   están definidos en cada invocación del gestor de salida
   y forman parte de la máscara de bits <code class="literal">flags</code> devuelta por
   <span class="function"><a href="function.ob-get-status.php" class="function">ob_get_status()</a></span>.
   Si el gestor se ejecuta con éxito y no devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>,
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-started">PHP_OUTPUT_HANDLER_STARTED</a></code></strong> y
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-processed">PHP_OUTPUT_HANDLER_PROCESSED</a></code></strong> están definidos.
   Si el gestor devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> o lanza una excepción durante la ejecución,
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-started">PHP_OUTPUT_HANDLER_STARTED</a></code></strong> y
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> están definidos.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Si <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> de un gestor está definido,
    el gestor no será invocado al llamar a
    <span class="function"><a href="function.ob-end-clean.php" class="function">ob_end_clean()</a></span>, <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>,
    <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>, <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>
    <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>, <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
    <span class="function"><a href="function.ob-clean.php" class="function">ob_clean()</a></span>,
    <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>
    o durante el proceso de terminación de PHP.
    Antes de PHP 8.4.0, este flag no tenía ningún efecto al llamar a las funciones <span class="function"><a href="function.ob-clean.php" class="function">ob_clean()</a></span>
    o <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>.
   </span>
  </p></blockquote>
 </div>
</div>
<?php manual_footer($setup); ?>