<?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.flushing-system-buffers.php',
    1 => 'Vaciar los b&uacute;feres del sistema',
    2 => 'Vaciar los b&uacute;feres del sistema',
  ),
  'up' => 
  array (
    0 => 'book.outcontrol.php',
    1 => 'Control de la visualizaci&oacute;n',
  ),
  'prev' => 
  array (
    0 => 'outcontrol.output-buffering.php',
    1 => 'Bufferizaci&oacute;n de salida',
  ),
  'next' => 
  array (
    0 => 'outcontrol.user-level-output-buffers.php',
    1 => 'B&uacute;feres de salida a nivel de usuario',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/outcontrol/flushing-system-buffers.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="outcontrol.flushing-system-buffers" class="chapter">
 <h1 class="title">Vaciar los búferes del sistema</h1>

 <p class="para">
  PHP ofrece dos formas de vaciar
  (enviar y eliminar el contenido) los búferes del sistema:
  mediante la llamada a <span class="function"><a href="function.flush.php" class="function">flush()</a></span>
  y activando el vaciado de búfer implícito
  con <span class="function"><a href="function.ob-implicit-flush.php" class="function">ob_implicit_flush()</a></span>
  o el parámetro <a href="outcontrol.configuration.php#ini.implicit-flush" class="link">implicit_flush</a>
  de <var class="filename">php.ini</var>.
 </p>

 <div class="section">
  <h2 class="title">Comportamiento de vaciado del búfer de salida</h2>
  <p class="para">
   Con el vaciado de búfer implícito desactivado, PHP solo vacía la salida cuando
   se llama a <span class="function"><a href="function.flush.php" class="function">flush()</a></span> o cuando finaliza el script.
  </p>
  <p class="para">
   Con el vaciado de búfer implícito activado, PHP intentará vaciar
   después de cada bloque de código que produzca salida.
   La salida en este contexto son datos de longitud no nula que son:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      fuera de las etiquetas <code class="literal">&lt;?php ?&gt;</code>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      mostrados por construcciones del lenguaje y funciones
      cuyo propósito explícito es mostrar variables o strings proporcionados por el usuario tales como
      <span class="function"><a href="function.echo.php" class="function">echo</a></span>, <span class="function"><a href="function.print.php" class="function">print</a></span>,
      <span class="function"><a href="function.printf.php" class="function">printf()</a></span>, <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span>,
      <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span>, <span class="function"><a href="function.vprintf.php" class="function">vprintf()</a></span>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      mostrados por funciones cuyo propósito es recolectar y producir
      datos/información sobre el script en ejecución o PHP tales como
      <span class="function"><a href="function.debug-print-backtrace.php" class="function">debug_print_backtrace()</a></span>, <span class="function"><a href="function.phpcredits.php" class="function">phpcredits()</a></span>,
      <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>,
      <span class="methodname"><a href="reflectionextension.info.php" class="methodname">ReflectionExtension::info()</a></span>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      mostrados por PHP en una excepción no capturada o un error no manejado
      (sujeto a los parámetros de
      <a href="errorfunc.configuration.php#ini.display-errors" class="link">display_errors</a>
      y <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a>)
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      todo lo que se escribe en <code class="literal">php://output</code>
     </span>
    </li>
   </ul>
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Mostrar strings vacíos o enviar encabezados no se considera salida
    y no desencadenará una operación de vaciado de búfer.
   </span>
  </p></blockquote>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Si el vaciado de búfer implícito está activado, los caracteres de control
    (por ejemplo <code class="literal">&quot;\n&quot;</code>, <code class="literal">&quot;\r&quot;</code>,
    <code class="literal">&quot;\0&quot;</code>)
    también desencadenarán un vaciado de búfer.
   </p>
  </div>
 </div>

 <div class="section">
  <h2 class="title">Limitaciones</h2>
  <p class="para">
   Esta funcionalidad no puede vaciar los búferes de salida a nivel de usuario.
   Para usarlos juntos, los búferes de salida a nivel de usuario deben ser vaciados
   antes de vaciar los búferes del sistema para que PHP produzca una salida.
  </p>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Llamar a <span class="function"><a href="function.flush.php" class="function">flush()</a></span> o activar el vaciado de búfer implícito
    puede interferir con los manejadores de salida de los búferes de salida a nivel de usuario
    que definen y envían encabezados en un contexto web
    (por ejemplo <span class="function"><a href="function.ob-gzhandler.php" class="function">ob_gzhandler()</a></span>)
    al enviar encabezados antes de que estos manejadores lo hagan.
   </p>
  </div>
  <p class="para">
   El almacenamiento en búfer implementado por el software/hardware subyacente
   no puede ser reemplazado por PHP y debe ser tenido en cuenta
   al utilizar las funciones de control de búferes de PHP.
   Verificar los parámetros de almacenamiento en búfer de los servidores web/navegadores/consolas
   y trabajar con ellos puede mitigar los problemas potenciales.
   Trabajando en un contexto web, ya sea los parámetros de almacenamiento en búfer del servidor web
   o el almacenamiento en búfer del script podrían ser ajustados para funcionar en conjunto
   mientras que trabajar con las estrategias de almacenamiento en búfer de varios navegadores
   puede lograrse ajustando el almacenamiento en búfer en el script PHP.
   En las consolas que implementan el almacenamiento en búfer por línea,
   los caracteres de nueva línea podrían ser insertados en los lugares apropiados
   antes de vaciar la salida.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Diferencias en el vaciado entre <abbr title="Server Application Programming Interface">SAPI</abbr></h2>
  <p class="para">
   Aunque el vaciado de búfer es implementado por cada <abbr title="Server Application Programming Interface">SAPI</abbr>
   de manera ligeramente diferente,
   estas implementaciones caen en una de dos categorías:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Los <abbr title="Server Application Programming Interface">SAPI</abbr>s usados en un contexto web vaciarán primero los encabezados
      seguidos de la salida.
      <code class="literal">Apache2Handler</code>, <code class="literal">CGI</code>,
      <code class="literal">FastCGI</code> y <code class="literal">FPM</code>
      son tales <abbr title="Server Application Programming Interface">SAPI</abbr>s
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      otros <abbr title="Server Application Programming Interface">SAPI</abbr>s
      tales como <code class="literal">CLI</code> y <code class="literal">embed</code>
      vaciarán solo la salida
     </span>
    </li>
   </ul>
  </p>
 </div>

</div>
<?php manual_footer($setup); ?>