<?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.user-level-output-buffers.php',
    1 => 'Buffers de Sa&iacute;da em N&iacute;vel de Usu&aacute;rio',
    2 => 'Buffers de Sa&iacute;da em N&iacute;vel de Usu&aacute;rio',
  ),
  'up' => 
  array (
    0 => 'book.outcontrol.php',
    1 => 'Controle de Sa&iacute;da',
  ),
  'prev' => 
  array (
    0 => 'outcontrol.flushing-system-buffers.php',
    1 => 'Descarregando Buffers de Sistema',
  ),
  'next' => 
  array (
    0 => 'outcontrol.what-output-is-buffered.php',
    1 => 'Que Sa&iacute;da &eacute; Armazenada em Buffer?',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Buffers de Saída em Nível de Usuário</h1>
<h2>Índice</h2><ul class="chunklist chunklist_chapter"><li><a href="outcontrol.what-output-is-buffered.php">Que Sa&iacute;da &eacute; Armazenada em Buffer?</a></li><li><a href="outcontrol.nesting-output-buffers.php">Aninhando Buffers de Sa&iacute;da</a></li><li><a href="outcontrol.buffer-size.php">Tamanho do Buffer</a></li><li><a href="outcontrol.operations-on-buffers.php">Opera&ccedil;&otilde;es permitidas em buffers</a></li><li><a href="outcontrol.output-handlers.php">Manipuladores de Sa&iacute;da</a></li><li><a href="outcontrol.working-with-output-handlers.php">Trabalhando com Manipuladores de Sa&iacute;da</a></li><li><a href="outcontrol.flags-passed-to-output-handlers.php">Op&ccedil;&otilde;es Passadas aos Manipuladores de Sa&iacute;da</a></li><li><a href="outcontrol.output-handler-return-values.php">Valores de Retorno do Menipulador de Sa&iacute;da</a></li></ul>

 <p class="para">
  Os buffers de saída no nível do usuário podem ser iniciados, manipulados
  e finalizados a partir do código PHP.
  Cada um desses buffers inclui um buffer de saída
  e uma função de manipulador de saída associada.
 </p>

 

 <div class="section">
  <h2 class="title">Ativando o buffer de saída</h2>
  <p class="para">
   O buffer de saída pode ser ativado usando
   a função <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> ou definindo
   as configurações <a href="outcontrol.configuration.php#ini.output-buffering" class="link">output_buffering</a>
   e <a href="outcontrol.configuration.php#ini.output-handler" class="link">output_handler</a>
   do <var class="filename">php.ini</var>.
   Embora ambas possam criar buffers de saída,
   <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> é mais flexível,
   pois aceita funções definidas pelo usuário como manipuladores de saída
   e as operações permitidas no buffer (liberar, limpar, remover)
   também podem ser definidas.
   Buffers iniciados com <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> estarão ativos
   a partir da linha em que a função foi chamada,
   enquanto aqueles iniciados com
   <a href="outcontrol.configuration.php#ini.output-buffering" class="link">output_buffering</a>
   irão armazenar a saída em buffer a partir da primeira linha do script.
  </p>
  <p class="para">
   O PHP também é fornecido com um manipulador de saída <code class="literal">&quot;URL-Rewriter&quot;</code>
   integrado que inicia seu próprio buffer de saída e permite
   até no máximo duas instâncias dele em execução a qualquer momento
   (uma para reescrita de URL no nível de usuário
   e uma para suporte transparente ao ID de sessão).
   Esses buffers podem ser iniciados chamando
   a função <span class="function"><a href="function.output-add-rewrite-var.php" class="function">output_add_rewrite_var()</a></span>
   e/ou ativando a configuração
   <a href="session.configuration.php#ini.session.use-trans-sid" class="link">session.use_trans_sid</a>
   do <var class="filename">php.ini</var>.
  </p>
  <p class="para">
   A extensão <code class="literal">zlib</code> incluída tem seu próprio
   buffer de saída que pode ser ativado usando a configuração
   <a href="zlib.configuration.php#ini.zlib.output-compression" class="link">zlib.output_compression</a>
   do <var class="filename">php.ini</var>.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Embora <code class="literal">&quot;URL-Rewriter&quot;</code> seja especial
    porque permite apenas até duas instâncias dele em execução ao mesmo tempo,
    todos os buffers de saída em nível de usuário usam os mesmos buffers subjacentes
    usados ​​por <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span>
    com sua funcionalidade implementada por uma função de manipulador de saída personalizada.
    Como tal, todas as suas funcionalidades podem ser emuladas pelo código do usuário.
   </span>
  </p></blockquote>
 </div>

 

 

 

 <div class="section">
  <h2 class="title">Descarregando, Acessando e Limpando o Conteúdo do Buffer</h2>
  <p class="para">
   A descarga envia e descarta o conteúdo do buffer ativo.
   Os buffers de saída são descarregados quando o tamanho da saída
   excede o tamanho do buffer; quando o script termina; ou quando
   <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>
   ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span> são chamados.
  </p>
  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="simpara">
    Chamar <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>
    ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span> irá desligar o buffer ativo.
   </p>
  </div>
  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="simpara">
    A descarga de buffers liberará o valor de retorno do manipulador de saída,
    que pode ser diferente do conteúdo do buffer.
    Por exemplo, usar <span class="function"><a href="function.ob-gzhandler.php" class="function">ob_gzhandler()</a></span> compactará
    a saída e liberará a saída compactada.
   </p>
  </div>
  <p class="para">
   O conteúdo do buffer ativo pode ser recuperado chamando
   <span class="function"><a href="function.ob-get-contents.php" class="function">ob_get_contents()</a></span>, <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>
   ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>.
  </p>
  <p class="para">
   Se apenas o comprimento do conteúdo do buffer for necessário,
   <span class="function"><a href="function.ob-get-length.php" class="function">ob_get_length()</a></span> ou <span class="function"><a href="function.ob-get-status.php" class="function">ob_get_status()</a></span>
   retornação o comprimento do conteúdo em bytes.
  </p>
  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="simpara">
    Chamar <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>
    ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span> irá desligar o buffer ativo
    depois de retornar seu conteúdo.
   </p>
  </div>
  <p class="para">
   O conteúdo do buffer ativo pode ser limpo chamando
   <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>
   ou <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>.
  </p>
  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="simpara">
    Chamar <span class="function"><a href="function.ob-end-clean.php" class="function">ob_end_clean()</a></span>
    ou <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span> desligará o buffer ativo.
   </p>
  </div>
 </div>

 <div class="section">
  <h2 class="title">Desligando Buffers</h2>
  <p class="para">
   Buffers de saída podem ser desligados chamando
   <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> ou <span class="function"><a href="function.ob-get-clean.php" class="function">ob_get_clean()</a></span>.
  </p>
  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="simpara">
    Buffers de saída iniciados sem a opção
    <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-removable">PHP_OUTPUT_HANDLER_REMOVABLE</a></code></strong>
    não podem ser desligados e podem gerar um <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>.
   </p>
  </div>
  <p class="para">
   Todo buffer de saída que não tiver sido fechado até o final do script,
   ou quando a função <span class="function"><a href="function.exit.php" class="function">exit()</a></span> for chamada, será descarregado
   e desligado pelo processo de desligamento do PHP.
   Os buffers serão descarregados e desligados na ordem inversa
   de sua inicialização.
   O último buffer iniciado será o primeiro,
   o primeiro buffer iniciado será o último a ser descarregado e desligado.
  </p>
  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="simpara">
    Se a descarga do conteúdo do buffer não for desejada,
    um manipulador de saída personalizado deverá ser usado para evitar a descarga durante o desligamento.
   </p>
  </div>
 </div>

 

 

 

 

 <div class="section">
  <h2 class="title">Exceções Lançadas em Manipuladores de Saída</h2>
  <p class="para">
   Se uma exceção não capturada é lançada em um manipulador de saída,
   o programa termina e o manipulador é invocado
   pelo processo de desligamento depois do qual
   a mensagem de erro <code class="literal">&quot;Uncaught Exception&quot;</code> (exceção não capturada) é descarregada.
  </p>
  <p class="para">
   Se a exceção não capturada é lançada em um manipulador
   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> ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
   o conteúdo do buffer é descarregado antes da mensagem de erro.
  </p>
  <p class="para">
   Se uma exceção não capturada é lançada em um manipulador de saída durante o desligamento,
   o manipulador é terminado e nem o conteúdo do buffer
   nem a mensagem de erro são descarregados.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Se um manipulador lança uma exceção,
    sua constante de estado <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> é definida.
   </span>
  </p></blockquote>
 </div>

 <div class="section">
  <h2 class="title">Erros Emitidos em Manipuladores de Saída</h2>
  <p class="para">
   Se um erro não fatal for gerado em um manipulador de saída,
   o programa continuará a execução.
  </p>
  <p class="para">
   Se o erro não fatal for gerado em um manipulador 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>
   ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
   o buffer descarrega determinados dados dependendo do valor de retorno do manipulador.
   Se o manipulador retornar <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, o buffer e a mensagem de erro são descarregados.
   Se retornar qualquer outra coisa, o valor de retorno do manipulador será descarregado,
   mas a mensagem de erro não.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Se um manipulador retornar <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>,
    sua constante de estado <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> será definida.
   </span>
  </p></blockquote>
  <p class="para">
   Se um erro fatal for gerado em um manipulador de saída,
   o programa será encerrado e o manipulador será invocado
   pelo processo de desligamento, após o qual a mensagem de erro será descarregada.
  </p>
  <p class="para">
   Se o erro fatal for gerado em um manipulador
   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> ou <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>,
   o conteúdo dos buffers será descarregado antes da mensagem de erro.
  </p>
  <p class="para">
   Se um erro fatal for gerado em um manipulador de saída durante o desligamento,
   o programa será encerrado sem descarregar o buffer ou a mensagem de erro.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Saída nos Manipuladores de Saída</h2>
  <p class="para">
   Em circunstâncias específicas, a saída produzida no manipulador é descarregada
   junto com o conteúdo do buffer.
   Esta saída não é anexada ao buffer e não faz parte da string
   retornada por <span class="function"><a href="function.ob-get-flush.php" class="function">ob_get_flush()</a></span>.
  </p>
  <p class="para">
   Durante operações de descarga (ao chamar <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>
   e durante o desligamento),
   se o valor de retorno de um manipulador for <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>,
   o conteúdo do buffer é descarregado seguido pela saída.
   Se o manipulador não for invocado durante o desligamento,
   o fato do manipulador lançar uma exceção ou chamar a função <span class="function"><a href="function.exit.php" class="function">exit()</a></span>
   resultará no mesmo comportamento.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Se um manipulador retornar <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>,
    sua constante de estado <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> é definida.
   </span>
  </p></blockquote>
 </div>

 <div class="section">
  <h2 class="title">Constantes de Estado do Manipulador de Saída</h2>
  <p class="para">
   As
   <a href="outcontrol.constants.php#outcontrol.constants.flags-returned-by-handler" class="link">
   constantes de estado de manipulador
   </a> da máscara de bits <code class="literal">flags</code> do buffer
   são definidas toda vez que o manipulador de saída é invocado
   e são parte das <code class="literal">flags</code> retornadas por
   <span class="function"><a href="function.ob-get-status.php" class="function">ob_get_status()</a></span>.
   Se o manipulador executa com sucesso e não retorna <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> e
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-processed">PHP_OUTPUT_HANDLER_PROCESSED</a></code></strong> são definidas.
   Se o manipulador retonar <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ou lança uma exceção durante a execução,
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-started">PHP_OUTPUT_HANDLER_STARTED</a></code></strong> e
   <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> são definidas.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Se a constante <strong><code><a href="outcontrol.constants.php#constant.php-output-handler-disabled">PHP_OUTPUT_HANDLER_DISABLED</a></code></strong> de um manipulador for definida,
    o manipulador não será invocado chamando-se
    <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-clean.php" class="function">ob_clean()</a></span>,
    <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>
    ou durante o processo de desligamento do PHP.
    Antes do PHP 8.4.0, esta constante não tinha efeito ao chamar <span class="function"><a href="function.ob-clean.php" class="function">ob_clean()</a></span>
    ou <span class="function"><a href="function.ob-flush.php" class="function">ob_flush()</a></span>.
   </span>
  </p></blockquote>
 </div>

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