Start · Sprachen · PHP · Referenz · connection_status

connection_status

Funktion

Gibt den aktuellen Verbindungsstatus als Bitfeld zurück, das Auskunft über den Zustand der Clientverbindung gibt.

seit PHP 4.0.0 Kategorie: misc

Signatur

connection_status(): int

Beschreibung

connection_status() liefert den aktuellen Verbindungsstatus als Integer-Bitfeld. Damit lässt sich während der Skriptausführung prüfen, ob die Verbindung zum Client noch aktiv ist, ob sie abgebrochen wurde oder ob das Skript durch ein Timeout beendet wurde.

PHP definiert dafür drei Konstanten: CONNECTION_NORMAL (0) — Verbindung ist aktiv; CONNECTION_ABORTED (1) — der Client hat die Verbindung getrennt; CONNECTION_TIMEOUT (2) — das Skript-Timeout wurde überschritten. Da es sich um ein Bitfeld handelt, können diese Zustände kombiniert auftreten, z. B. CONNECTION_ABORTED | CONNECTION_TIMEOUT (3).

Typischer Einsatzort sind langläufige Skripte (z. B. Dateiexporte, Batch-Verarbeitungen), bei denen unnötige Arbeit vermieden werden soll, wenn der Nutzer die Seite bereits geschlossen hat. In Verbindung mit ignore_user_abort(true) kann das Skript auch nach einem Client-Abbruch weiterlaufen, sollte aber regelmäßig den Status prüfen, um ressourcenaufwändige Operationen frühzeitig abzubrechen.

Wichtig: Der Status wird vom PHP-Kern erst dann korrekt aktualisiert, wenn Output an den Client gesendet (und geflushht) wird, da PHP-Verbindungsabbrüche über fehlgeschlagene Schreibvorgänge auf den Output-Buffer erkennt.

Rückgabewert

Typ
int
Beschreibung
Gibt ein Integer-Bitfeld zurück. Mögliche Werte: CONNECTION_NORMAL (0), CONNECTION_ABORTED (1), CONNECTION_TIMEOUT (2) oder eine Kombination davon (z. B. 3 für abgebrochen und Timeout).

Beispiele

Grundlegende Statusabfrage während eines langen Skripts

<?php
ignore_user_abort(true); // Skript läuft auch nach Client-Abbruch weiter

for ($i = 0; $i < 100; $i++) {
    // Verbindungsstatus prüfen
    $status = connection_status();

    if ($status & CONNECTION_ABORTED) {
        // Client hat die Verbindung getrennt — Verarbeitung abbrechen
        error_log('Verbindung durch Client getrennt nach ' . $i . ' Iterationen.');
        break;
    }

    if ($status & CONNECTION_TIMEOUT) {
        error_log('Skript-Timeout erreicht nach ' . $i . ' Iterationen.');
        break;
    }

    // Simulierte Arbeit
    echo "Schritt $i abgeschlossen.\n";
    flush();
    sleep(1);
}

echo "Verarbeitung beendet.\n";
Schritt 0 abgeschlossen. Schritt 1 abgeschlossen. ...

Statuswert mit Konstantennamen ausgeben

<?php
$status = connection_status();

$labels = [];
if ($status === CONNECTION_NORMAL) {
    $labels[] = 'NORMAL';
}
if ($status & CONNECTION_ABORTED) {
    $labels[] = 'ABORTED';
}
if ($status & CONNECTION_TIMEOUT) {
    $labels[] = 'TIMEOUT';
}

echo 'Verbindungsstatus: ' . implode(' | ', $labels) . ' (' . $status . ')';
Verbindungsstatus: NORMAL (0)

// Wichtig · Fallstricke

Output erforderlich für korrekte Erkennung: PHP erkennt einen Client-Abbruch erst, wenn es versucht, Daten zu senden. Ohne vorherigen flush()-Aufruf bleibt der Status möglicherweise CONNECTION_NORMAL, obwohl der Client längst weg ist.

CLI-Skripte: Unter der Kommandozeile ist der Verbindungsstatus immer CONNECTION_NORMAL, da es keinen HTTP-Client gibt.

In Kombination mit ignore_user_abort() und set_time_limit() ermöglicht connection_status() eine feingranulare Steuerung langläufiger Prozesse.