PHP não detecta a conexão abortar

Eu li e compreendi profundamente estes:http://www.php.net/manual/en/features.connection-handling.php http://www.php.net/manual/en/function.register-shutdown-function.php

No entanto, eu testei o PHP 5.1.6 e 5.3 e as coisas não funcionam como descrito lá. O que eu observo é:

connection_status () sempre retorna true, mesmo depois que o cliente fechou a conexão.a execução do script continua depois que o cliente fechou a conexão, mesmo que ignore_user_abort seja 0uma função registrada com register_shutdown_function () não é executada até que o script seja finalizado. O script NÃO é interrompido (e, portanto, a função não é chamada) quando o cliente aborta a conexão.

Então, basicamente, o PHP simplesmente não detecta a desconexão do cliente.

Observe que isso NÃO é como se ignore_user_abort fosse definido como 1: se esse fosse o caso, connection_status () retornaria 1 mesmo que o script continuasse em execução e a função de desligamento não fosse chamada até o final. Esse não é o caso.

ini_get ("ignore_user_abort") retorna 0, conforme o esperado.

Isso é um bug no PHP, ou isso pode ser devido a alguma configuração do Apache?

Como faço para o PHP funcionar como descrito na documentação acima?

Script de teste:

<?php

function myShutdown() {
    error_log("myShutdown ".connection_status()." ".ini_get("ignore_user_abort"));
}

register_shutdown_function(myShutdown);

echo "Hi!";
error_log(" *** test/test *** ");
for ($i=0; $i<10; $i++) {
    sleep(1);
    error_log(".");
    echo ".";
}
?>

Etapas para reproduzir: - visite a URL do script - aborte a conexão no cliente antes de 10 segundos (por exemplo, pressione o botão Parar no navegador)

Comportamento esperado / esperado: Os logs devem mostrar menos de 10 pontos e, no final, "myShutdown 1 0" (se você observar o log em tempo real, o myShutDown deve aparecer imediatamente quando o cliente desconectar)

Comportamento observado / atual: Os logs mostram sempre exatamente 10 pontos, e no final "myShutdown 0 0" (se você assiste em tempo real, ele continua por 10 segundos, não importa quando o cliente desconecta).

questionAnswers(1)

yourAnswerToTheQuestion