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ões', ), 'up' => array ( 0 => 'features.php', 1 => 'Características', ), 'prev' => array ( 0 => 'features.remote-files.php', 1 => 'Usando arquivos remotos', ), 'next' => array ( 0 => 'features.persistent-connections.php', 1 => 'Conexões Persistentes com o Banco de Dados', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'features/connection-handling.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
O status de uma conexão é mantido internamente no PHP. Existem 4 estados possíveis:
Quando um script PHP está sendo executado normalmente, o estado NORMAL está ativo. Se o cliente remoto desconecta, o estado ABORTED (abortado) é ligado. Uma desconexão do cliente remoto é normalmente causada pelo usuário apertando o botão STOP. Se o tempo limite imposto pelo PHP (veja set_time_limit()) é alcançado, o estado TIMEOUT (tempo acabado) é ligado.
Você pode decidir se quer ou não que a desconexão do cliente cause
interrupção em seu script. As vezes é útil sempre fazer o seu
script rodar até completar mesmo se não houver nenhum navegador remoto recebendo
a saída. O comportamento padrão, no entanto, é de seu script ser
interrompido quando o cliente remoto se desconecta. Esse comportamento pode ser
configurado através da diretiva ignore_user_abort php.ini assim como pela
diretiva correspondente php_value ignore_user_abort
no
httpd.conf do Apache ou
com a função ignore_user_abort(). Se você não disser
para o PHP ignorar o abort do usuário e ele abortar, seu script
será encerrado. A única exceção é se você tiver registrado uma função
de finalização usando register_shutdown_function(). Com uma
função de finalização, quando um usuário remoto clica no botão STOP, a
próxima vez que seu 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 seu script
mesmo terminando normalmente, então para fazer algo diferente caso o cliente
desconecte, você pode usar a função connection_aborted().
Essa função retorna true
se a conexão foi
abortada.
Seu script também pode ser finalizado pelo timer interno.
O tempo limite padrão é de 30 segundos. Podendo ser mudado usando a
diretiva max_execution_time php.ini ou a diretiva correspondente
no httpd.conf do Apache php_value max_execution_time
assim como com a função
set_time_limit(). Quando o timer
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 você pode checar se a
causa da finalização foi estouro do tempo limite chamando a
função connection_status(). Essa função retornará
2 se a causa foi exceder o tempo limite.
Uma coisa a ser notada é que ambos os estados ABORTED e TIMEOUT podem estar ligados ao mesmo tempo. Isso é possível se você disser ao PHP para ignorar o abort do usuário causou. PHP continuará a perceber o fato que o usuário pode ter quebrado a conexão, mas o script continuará executando. Se então ele alcançar o tempo limite, ele será abortado e sua função de finalização, se existente, será chamada. Nesse ponto, você terá que connection_status() retorna 3.