W3docs

time_sleep_until()

Erfahren Sie, wie die PHP-Funktion time_sleep_until() funktioniert, was sie zurückgibt und wann Sie sie einsetzen sollten – mit Beispielen.

Die PHP-Funktion time_sleep_until() hält ein Skript bis zu einem absoluten Zeitpunkt an, der als Unix-Timestamp angegeben wird. Im Unterschied zu sleep(), das eine Dauer abwartet („schlafe 10 Sekunden"), wartet diese Funktion bis zu einem Moment („schlafe bis 14:30:00"). Dieser Artikel erklärt die Syntax, den Rückgabewert, Sonderfälle und wann man sie einsetzen sollte.

Syntax

time_sleep_until(float $timestamp): bool
  • $timestamp — der Unix-Timestamp (Sekunden seit der Epoche), bei dem das Skript fortgesetzt werden soll. Da der Parameter ein float ist, können Sie Bruchteile von Sekunden für Sub-Sekunden-Präzision übergeben (z. B. time() + 2.5).
  • Rückgabewert — gibt bei Erfolg true und bei Fehler false zurück.

Wenn der übergebene Timestamp bereits in der Vergangenheit liegt, kehrt die Funktion sofort zurück, ohne zu warten. In PHP 8 gibt sie false zurück und erzeugt eine Warnung; in PHP 7 war das Verhalten identisch. In jedem Fall blockiert das Skript nicht — verlassen Sie sich also nicht darauf, dass der Aufruf „wartet", wenn der Zielzeitpunkt bereits verstrichen ist.

Verwendung der Funktion time_sleep_until()

Rufen Sie die Funktion auf und übergeben Sie den Timestamp, bei dem das Skript fortgesetzt werden soll. Das häufigste Muster besteht darin, einen Offset zur aktuellen Zeit hinzuzufügen, die von time() zurückgegeben wird:

php— editable, runs on the server

Hier ist time() + 10 ein absoluter Unix-Timestamp zehn Sekunden in der Zukunft. time_sleep_until() blockiert, bis die Systemuhr diesen Wert erreicht, dann wird die Ausführung fortgesetzt und die abschließende Meldung ausgegeben.

Warten bis zur nächsten ganzen Minute

Da Sie einen absoluten Zeitpunkt übergeben, ist time_sleep_until() ideal für die Ausrichtung von Aufgaben an einer Uhrgrenze — zum Beispiel das Starten einer Aufgabe genau zu Beginn der nächsten Minute:

<?php
$now  = time();
$next = $now - ($now % 60) + 60; // round up to the next whole minute
echo "Now: " . date('H:i:s', $now) . "\n";
time_sleep_until($next);
echo "Resumed at: " . date('H:i:s', $next) . "\n";
?>

Der Ausdruck $now - ($now % 60) + 60 entfernt die Sekunden vom aktuellen Timestamp und addiert 60, was den Timestamp der bevorstehenden Minute ergibt. Dies ist genauer als sleep(60), das driften würde, wenn das Skript mitten in einer Minute gestartet wird.

Sub-Sekunden-Präzision

Ein Bruchteil-Timestamp bewirkt eine Verzögerung von Sekundenbruchteilen:

<?php
$start = microtime(true);
time_sleep_until(microtime(true) + 0.25); // wait 250 ms
echo "Waited " . round(microtime(true) - $start, 2) . " seconds\n";
?>

Wenn Sie eine Dauer statt eines absoluten Moments abwarten möchten, verwenden Sie usleep() (Mikrosekunden) oder time_nanosleep() (Nanosekunden).

time_sleep_until() vs sleep()

FunktionArgumentBedeutung
sleep()Anzahl der Sekundenwarte für eine Dauer
usleep()Anzahl der Mikrosekundenwarte für eine Sub-Sekunden-Dauer
time_sleep_until()absoluter Unix-Timestampwarte bis zu einem bestimmten Moment

Wählen Sie time_sleep_until(), wenn Sie den genauen Uhrzeitpunkt kennen, bei dem die Ausführung fortgesetzt werden soll; wählen Sie sleep()/usleep(), wenn Sie nur die Wartezeit festlegen möchten. Den Ziel-Timestamp können Sie mit Hilfsfunktionen wie time() oder microtime() ermitteln.

Überlegungen zur Performance

time_sleep_until() blockiert den aktuellen Prozess, bis der Zielzeitpunkt erreicht ist. Während des Wartens verbraucht es kaum CPU, aber ein blockierter Prozess bleibt trotzdem gestoppt: Bei einer Web-Anfrage kann eine lange Wartezeit das max_execution_time-Limit oder den Request-Timeout des Webservers überschreiten und einen 504-Fehler erzeugen. Daher eignet sich die Funktion am besten für CLI-Skripte, Cron-Jobs und Worker-Prozesse statt für benutzerorientierte Anfragen. Vermeiden Sie den Einsatz in leistungskritischen Pfaden, und halten Sie die Wartezeit in HTTP-Kontexten kurz.

Fazit

time_sleep_until() hält ein Skript bis zu einem absoluten Unix-Timestamp an und ist damit das richtige Werkzeug für uhrzeitausgerichtete Verzögerungen, wo sleep() nur eine Dauer erlauben würde. Beachten Sie, dass die Funktion true/false zurückgibt, bei vergangenen Timestamps nicht blockiert, Sekundenbruchteile akzeptiert und den gesamten Prozess während des Wartens belegt — daher sollte sie CLI- und Worker-Code vorbehalten bleiben und nicht für Web-Anfragen verwendet werden.

Übungen

Übung
Was machen die PHP-Funktionen time, sleep und usleep?
Was machen die PHP-Funktionen time, sleep und usleep?
Was this page helpful?