PHP no detecta la conexión abortada en absoluto

He leído y entendido profundamente estos:http://www.php.net/manual/en/features.connection-handling.php http://www.php.net/manual/en/function.register-shutdown-function.php

Sin embargo, he probado tanto PHP 5.1.6 como 5.3 y las cosas NO funcionan como se describe allí. Lo que observo es:

connection_status () siempre devuelve true, incluso después de que el cliente haya cerrado la conexión.la ejecución de la secuencia de comandos continúa después de que el cliente haya cerrado la conexión, aunque ignore_user_abort es 0una función registrada con register_shutdown_function () no se ejecuta hasta que el script llega a su fin. La secuencia de comandos NO se interrumpe (y, por lo tanto, no se llama a la función) cuando el cliente interrumpe la conexión.

Así que, básicamente, PHP simplemente no detecta la desconexión del cliente en absoluto.

Tenga en cuenta que esto NO es como si ignore_user_abort se estableciera en 1: si ese fuera el caso, connection_status () devolvería 1 aunque el script continuaría ejecutándose y la función de apagado no se activaría hasta el final. Ese no es el caso.

ini_get ("ignore_user_abort") devuelve 0, como se esperaba.

¿Es esto un error en PHP, o puede ser debido a alguna configuración de Apache?

¿Cómo consigo que PHP funcione como se describe en la documentación antes mencionada?

Guión de prueba:

<?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 ".";
}
?>

Pasos para reproducir: - visite la url del script - cancele la conexión en el cliente antes de que transcurran 10 segundos (por ejemplo, presione el botón de detener en el navegador)

Comportamiento esperado / deseado: los registros deben mostrar menos de 10 puntos y, al final, "myShutdown 1 0" (si observa el registro en tiempo real, myShutDown debería aparecer inmediatamente cuando el cliente se desconecta)

Comportamiento observado / actual: los registros muestran siempre exactamente 10 puntos, y al final "myShutdown 0 0" (si lo observa en tiempo real, continúa durante 10 segundos, sin importar cuándo se desconecte el cliente).

Respuestas a la pregunta(1)

Su respuesta a la pregunta