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.