Start · Sprachen · PHP · Referenz · connection_aborted

connection_aborted

Funktion

Gibt zurück, ob die Verbindung zum Client abgebrochen wurde (<code>1</code>) oder noch aktiv ist (<code>0</code>).

seit PHP 4.0.0 Kategorie: misc

Signatur

connection_aborted(): int

Beschreibung

connection_aborted() prüft, ob der Client (z. B. ein Browser) die HTTP-Verbindung vorzeitig getrennt hat. Die Funktion gibt 1 zurück, wenn die Verbindung abgebrochen wurde, und 0, wenn sie noch besteht.

Typischerweise wird connection_aborted() innerhalb langer Schleifen oder ressourcenintensiver Skripte eingesetzt, um unnötige Verarbeitung zu vermeiden, sobald kein Client mehr zuhört. So lässt sich CPU- und Speicherverbrauch sparen, wenn der Nutzer z. B. die Seite geschlossen oder die Anfrage abgebrochen hat.

Damit PHP Verbindungsabbrüche überhaupt erkennen kann, muss ignore_user_abort(false) gesetzt sein (Standardverhalten) oder ignore_user_abort() muss false zurückliefern. Ist ignore_user_abort(true) aktiv, läuft das Skript weiter und connection_aborted() gibt dennoch korrekt 1 zurück – die Verarbeitung wird aber nicht automatisch gestoppt.

Der Verbindungsstatus kann auch über connection_status() abgefragt werden, welche einen Bitflag-Wert zurückgibt, der sowohl Abbruch als auch Timeout unterscheidet.

Rückgabewert

Typ
int
Beschreibung
Gibt 1 zurück, wenn die Client-Verbindung abgebrochen wurde, andernfalls 0.

Beispiele

Lange Schleife bei Verbindungsabbruch unterbrechen

<?php
// Sicherstellen, dass PHP Verbindungsabbrüche erkennt
ignore_user_abort(false);

for ($i = 0; $i < 100; $i++) {
    if (connection_aborted()) {
        // Verarbeitung sofort beenden, wenn Client weg ist
        error_log('Verbindung abgebrochen bei Iteration ' . $i);
        exit;
    }

    // Simulierte aufwändige Verarbeitung
    echo "Schritt $i\n";
    flush();
    sleep(1);
}

Verbindungsstatus gezielt auswerten

<?php
ignore_user_abort(false);

// Ressourcenintensive Datenbankoperation
for ($batch = 0; $batch < 50; $batch++) {
    if (connection_aborted()) {
        // Aufräumen und abbrechen
        error_log('Export abgebrochen durch Client nach Batch ' . $batch);
        break;
    }

    // Simulierter Export-Schritt
    $data = array_fill(0, 1000, 'Datensatz ' . $batch);
    echo 'Batch ' . $batch . ' exportiert (' . count($data) . ' Zeilen)' . PHP_EOL;
    flush();
    usleep(100000); // 100 ms
}

echo 'Verarbeitung beendet. Status: ' . (connection_aborted() ? 'Abgebrochen' : 'Abgeschlossen') . PHP_EOL;

// Wichtig · Fallstricke

Wichtig: PHP überprüft den Verbindungsstatus standardmäßig nur, wenn Daten an den Client gesendet werden. Ohne flush() oder tatsächliche Ausgabe kann connection_aborted() den Abbruch möglicherweise nicht rechtzeitig erkennen.

Wenn ignore_user_abort(true) gesetzt ist, wird das Skript nach einem Client-Abbruch weiter ausgeführt, aber connection_aborted() liefert trotzdem 1 – die Funktion selbst stoppt die Ausführung nicht.

In CLI-Skripten ist diese Funktion bedeutungslos, da es keine HTTP-Verbindung gibt; sie gibt dort immer 0 zurück.