PHP erkennt überhaupt keinen Verbindungsabbruch

Ich habe Folgendes gelesen und verstanden:http://www.php.net/manual/en/features.connection-handling.php http://www.php.net/manual/en/function.register-shutdown-function.php

Ich habe jedoch sowohl PHP 5.1.6 als auch PHP 5.3 getestet und die dort beschriebenen Funktionen funktionieren NICHT. Was ich beobachte ist:

connection_status () gibt immer true zurück, auch wenn der Client die Verbindung geschlossen hat.Die Ausführung des Skripts wird fortgesetzt, nachdem der Client die Verbindung geschlossen hat, obwohl ignore_user_abort 0 istEine mit register_shutdown_function () registrierte Funktion wird erst ausgeführt, wenn das Skript das Ende erreicht hat. Das Skript wird NICHT unterbrochen (und daher die Funktion nicht aufgerufen), wenn der Client die Verbindung abbricht.

Grundsätzlich erkennt PHP die Trennung des Clients also überhaupt nicht.

Beachten Sie, dass dies NICHT so ist, als ob ignore_user_abort auf 1 gesetzt wäre: Wenn dies der Fall wäre, würde connection_status () 1 zurückgeben, obwohl das Skript weiter ausgeführt und die Shutdown-Funktion erst am Ende aufgerufen würde. Das ist nicht der Fall.

ini_get ("ignore_user_abort") gibt erwartungsgemäß 0 zurück.

Ist dies ein Fehler in PHP oder kann dies an einer Apache-Einstellung liegen?

Wie bringe ich PHP zum Laufen, wie in der oben genannten Dokumentation beschrieben?

Testskript:

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

Zu reproduzierende Schritte: - Besuchen Sie die URL des Skripts. - Unterbrechen Sie die Verbindung auf dem Client, bevor 10 Sekunden vergangen sind. (Drücken Sie z. B. die Stopp-Taste im Browser.)

Erwartetes / gewünschtes Verhalten: Die Protokolle sollten weniger als 10 Punkte und am Ende "myShutdown 1 0" anzeigen. (Wenn Sie das Protokoll in Echtzeit anzeigen, sollte myShutDown sofort angezeigt werden, wenn der Client die Verbindung trennt.)

Beobachtetes / aktuelles Verhalten: Die Protokolle zeigen immer genau 10 Punkte und am Ende "myShutdown 0 0" (wenn Sie es in Echtzeit sehen, dauert es 10 Sekunden, unabhängig davon, wann der Client die Verbindung trennt).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage