Signatur
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
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.