Manual do PHP
Anterior |  | Próxima

# Capítulo 40. Tratamento de Conexões

> Nota: O texto se aplica a versão 3.0.7 ou superior.

O status de uma conexão é mantido internamente no PHP. Existem 3 estados possíveis:

- 0 - NORMAL

- 1 - ABORTED

- 2 - TIMEOUT

Quando um script PHP está sendo executado normalmente, o estado NORMAL está ativo. Se o cliente remoto disconecta, o estado ABORTED(abordado) é ligado. Uma disconexã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 disconexão do cliente cause que seu script seja abortado. As vezes é útil sempre fazer o seu script rodar até completar mesmo se não há nenhum navegador remoto recebendo a saída. O comportamento padrão, no entanto, é de seu script ser abortado quando o cliente remoto disconecta. Esse comportamento pode ser configurado através da diretiva ignore_user_abort `php.ini` assim como pela diretiva correspondente do Apache .conf, "php_value ignore_user_abort" 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á finalizado. 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 abortada 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 disconecte, 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. Pode ser mudado usando a diretiva max_execution_time `php.ini` ou a diretiva do Apache .conf correspondente 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 disconexão, 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_timeout(). Essa função retornará `TRUE` se o a função de finalização foi chamada pelo tempo ter acabado.

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. O PHP continuará a notar 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 houver, será chamada. Nesse ponto, você terá que connection_status() retorna 3.

Anterior | Principal | Próxima
Usando arquivos remotos | Acima | Conexão Permanente com o Banco de Dados