<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'features.connection-handling.php',
    1 => 'Tratamento de Conex&otilde;es',
    2 => 'Tratamento de Conex&otilde;es',
  ),
  'up' => 
  array (
    0 => 'features.php',
    1 => 'Caracter&iacute;sticas',
  ),
  'prev' => 
  array (
    0 => 'features.remote-files.php',
    1 => 'Usando arquivos remotos',
  ),
  'next' => 
  array (
    0 => 'features.persistent-connections.php',
    1 => 'Conex&otilde;es Persistentes com o Banco de Dados',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'features/connection-handling.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.connection-handling" class="chapter">
  <h1 class="title">Tratamento de Conexões</h1>


  <p class="para">
   O estado de uma conexão é mantido internamente no PHP. Existem 4
   estados possíveis:
   <ul class="itemizedlist">
    <li class="listitem"><span class="simpara">0 - NORMAL</span></li>
    <li class="listitem"><span class="simpara">1 - ABORTADO</span></li>
    <li class="listitem"><span class="simpara">2 - EXPIRADO</span></li>
    <li class="listitem"><span class="simpara">3 - ABORTADO e EXPIRADO</span></li>
   </ul>
  </p>

  <p class="simpara">
   Quando um script PHP está sendo executado normalmente, o estado NORMAL está ativo.
   Se o cliente remoto desconectar, o estado ABORTADO é
   ativado. Uma desconexão do cliente remoto é normalmente causada pelo
   usuário pressionando o botão de parada. Se o tempo limite imposto pelo PHP (veja
   <span class="function"><a href="function.set-time-limit.php" class="function">set_time_limit()</a></span>) é alcançado, o estado EXPIRADO
   é ativado.</p>

  <p class="simpara">
   É possível decidir se a desconexão do cliente cause ou não uma
   interrupção no script. As vezes é útil deixar o script em execução
   até que seja concluído mesmo se não houver nenhum navegador remoto recebendo
   a saída. O comportamento padrão, no entanto, é a interrupção
   do script quando o cliente remoto se desconecta. Esse comportamento pode ser
   configurado através da diretiva ignore_user_abort do <var class="filename">php.ini</var>, assim como pela
   diretiva correspondente <code class="literal">php_value ignore_user_abort</code> no
   <var class="filename">httpd.conf</var> do Apache ou
   com a função <span class="function"><a href="function.ignore-user-abort.php" class="function">ignore_user_abort()</a></span>. Se o PHP não for instruído
   a ignorar o aborto por parte do usuário e ele abortar, o script
   será encerrado. A única exceção é se uma função de finalização tiver sido
   registrada usando <span class="function"><a href="function.register-shutdown-function.php" class="function">register_shutdown_function()</a></span>. Com uma
   função de finalização, quando um usuário remoto clica no botão de parada, a
   próxima vez que o script tentar gerar alguma saída, o PHP detectará que
   a conexão foi cancelada e a função de finalização é chamada.
   Essa função de finalização também será chamada no fim do script
   mesmo que ele termine normalmente, então para fazer algo diferente caso o cliente
   desconecte, a função <span class="function"><a href="function.connection-aborted.php" class="function">connection_aborted()</a></span> pode ser usada.
   Essa função retorna <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> se a conexão foi
   abortada.</p>

  <p class="simpara">
   O script também pode ser finalizado pelo temporizador interno.
   O tempo limite padrão é de 30 segundos. Pode ser alterado usando a
   diretiva <strong class="option unknown">max_execution_time</strong> do <var class="filename">php.ini</var> ou a diretiva correspondente
   no <var class="filename">httpd.conf</var> do Apache <code class="literal">php_value max_execution_time</code>
   assim como com a função
   <span class="function"><a href="function.set-time-limit.php" class="function">set_time_limit()</a></span>. Quando o temporizador
   chega ao limite, o script será abortado e assim como o caso acima
   de desconexão pelo cliente, se uma função de finalização foi registrada, ela será
   chamada. Dentro da função de finalização, pode ser verificado se a
   causa da finalização foi tempo limite excedido chamando-se a
   função <span class="function"><a href="function.connection-status.php" class="function">connection_status()</a></span>. Essa função retorna
   2 se a causa foi tempo limite excedido.
  </p>

  <p class="simpara">
   Importante notar que ambos os estados ABORTADO e EXPIRADO
   podem estar ativos ao mesmo tempo. Isso é possível se o PHP
   for instruído a ignorar o aborto causado pelo usuário. O PHP continuará a perceber que
   o usuário pode ter quebrado a conexão, mas o script continuará
   sendo executado. Se o tempo limite for alcançado, ele será abortado e
   sua função de finalização, se existente, será chamada. Nesse ponto,
   a função <span class="function"><a href="function.connection-status.php" class="function">connection_status()</a></span>
   retornará 3.
  </p>
 </div>
<?php manual_footer($setup); ?>