<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'outcontrol.flushing-system-buffers.php',
    1 => 'Descarregando Buffers de Sistema',
    2 => 'Descarregando Buffers de Sistema',
  ),
  'up' => 
  array (
    0 => 'book.outcontrol.php',
    1 => 'Controle de Sa&iacute;da',
  ),
  'prev' => 
  array (
    0 => 'outcontrol.output-buffering.php',
    1 => 'Buffer de Sa&iacute;da',
  ),
  'next' => 
  array (
    0 => 'outcontrol.user-level-output-buffers.php',
    1 => 'Buffers de Sa&iacute;da em N&iacute;vel de Usu&aacute;rio',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Descarregando Buffers de Sistema</h1>

 <p class="para">
  O PHP fornece duas maneiras relacionadas
  para descarregar os buffers de sistema (enviar e descartar o conteúdo):
  chamando-se a função <span class="function"><a href="function.flush.php" class="function">flush()</a></span>
  e habilitando o descarregamento implicitamente
  com a função <span class="function"><a href="function.ob-implicit-flush.php" class="function">ob_implicit_flush()</a></span>
  ou com a configuração <a href="outcontrol.configuration.php#ini.implicit-flush" class="link">implicit_flush</a>
  do <var class="filename">php.ini</var>.
 </p>

 <div class="section">
  <h2 class="title">Comportamento do Descarregameto da Saída</h2>
  <p class="para">
   Com o descarregamento implícito desabilitado, o PHP irá descarregar a saída somente
   quendo <span class="function"><a href="function.flush.php" class="function">flush()</a></span> for chamada ou quando o script terminar.
  </p>
  <p class="para">
   Com o descarregamento implícito habilitado, o PHP tentará descarregar
   após cada bloco de código que resulte em uma saída.
   A saída neste contexto é um dado de comprimento maior que zero que:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      esteja fora das tags <code class="literal">&lt;?php ?&gt;</code>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      seja exibido por construções de linguagem e funções
      cujo propósito explícito é mostrar variáveis fornecidas pelo usuário ou strings tais 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> e <span class="function"><a href="function.vprintf.php" class="function">vprintf()</a></span>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      seja exibido por funções cujo propósito é coletar e mostrar
      dados/informações no script em execução ou no PHP tais 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> e
      <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">
      seja mostrado pelo PHP em uma exceção não capturada ou erro não gerenciado
      (sujeitos às configurações de
      <a href="errorfunc.configuration.php#ini.display-errors" class="link">display_errors</a>
      e <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a>)
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      seja qualquer coisa escrita em <code class="literal">php://output</code>
     </span>
    </li>
   </ul>
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Exibir strings vazias ou enviar cabeçalhos não é considerado saída
    e não resultará em operação de descarregamento.
   </span>
  </p></blockquote>
  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="simpara">
    Se o descarregamento implícito estiver habilitado, caracteres de controle
    (ex.: <code class="literal">&quot;\n&quot;</code>, <code class="literal">&quot;\r&quot;</code>,
    <code class="literal">&quot;\0&quot;</code>)
    também irão ativar o descarregamento.
   </p>
  </div>
 </div>

 <div class="section">
  <h2 class="title">Limitações</h2>
  <p class="para">
   Esta funcionalidade não pode descarregar buffers de saída no nível do usuário.
   Para usá-los juntos, buffers de saída no nível do usuário devem ser descarregados
   antes do descarregamento ds buffers de sistema para que o PHP produza qualquer saída.
  </p>
  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="simpara">
    Chamar <span class="function"><a href="function.flush.php" class="function">flush()</a></span> ou habilitar o descarregamento implícito
    pode interferir com os manipuladores de saída de buffers no nível do usuário
    que definem e enviam cabeçalhos em um contexto web
    (ex.: <span class="function"><a href="function.ob-gzhandler.php" class="function">ob_gzhandler()</a></span>)
    enviando cabeçalhos antes que estes manipuladores o façam.
   </p>
  </div>
  <p class="para">
   Buffer implementado pelo software/hardware subjacente
   não podem ser substituídos pelo PHP e devem ser levados em consideração
   ao se trabalhar com as funções de controle de buffer do PHP.
   Verificar as configurações de buffer dos servidores web, navegadores e consoles
   e trabalhar com elas pode aliviar possíveis problemas.
   Trabalhar em um contexto web, tanto as configurações de buffer do servidor
   quanto de buffer do script podem ser ajustadas para operar sequencialmente
   enquanto que contornar as estratégias de buffer de vários navegadores
   pode ser conseguido ajustando o buffer no script PHP.
   Em consoles que implementam buffer de linha,
   caracteres de nova linha podem ser inseridos nos locais
   apropriados antes de liberar a saída.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Diferenças <abbr title="Server Application Programming Interface">SAPI</abbr> No Descarregamento</h2>
  <p class="para">
   Embora o descarregamento seja implementado por cada <abbr title="Server Application Programming Interface">SAPI</abbr>
   de uma maneira ligeiramente diferente,
   essas implementações se enquadram em uma de duas categorias:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      <abbr title="Server Application Programming Interface">SAPI</abbr>s usadas em um contexto web irão descarregar cabeçalhos primeiro,
      e depois a saída.
      <code class="literal">Apache2Handler</code>, <code class="literal">CGI</code>,
      <code class="literal">FastCGI</code> e <code class="literal">FPM</code>
      são tais <abbr title="Server Application Programming Interface">SAPI</abbr>s.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Outras <abbr title="Server Application Programming Interface">SAPI</abbr>s
      tais como <code class="literal">CLI</code> e <code class="literal">embed</code>
      irão descarregar somente a saída.
     </span>
    </li>
   </ul>
  </p>
 </div>

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