Signatur
Beschreibung
swoole_async_write ermöglicht das nicht-blockierende Schreiben von Daten in eine Datei. Im Gegensatz zur klassischen file_put_contents-Funktion wartet der Prozess nicht auf den Abschluss des Schreibvorgangs, sondern führt den restlichen Code unmittelbar weiter aus. Dies ist besonders in hochperformanten Server-Applikationen mit Swoole sinnvoll, bei denen blockierende I/O-Operationen den Event-Loop aufhalten würden.
Der optionale Parameter $offset legt fest, an welcher Byte-Position in der Datei geschrieben werden soll. Wird -1 übergeben, wird am aktuellen Ende der Datei angehängt (Append-Modus). So können Daten gezielt an beliebige Stellen in bestehenden Dateien geschrieben werden.
Sobald der Schreibvorgang abgeschlossen ist, wird – sofern angegeben – die Callback-Funktion aufgerufen. Diese erhält den Dateinamen als Argument und kann z. B. zur Fehlerbehandlung oder zur Verarbeitung nach dem Schreiben genutzt werden.
Hinweis: Diese Funktion ist Teil der älteren Swoole-API und wurde in neueren Versionen von Swoole zugunsten der Coroutine-basierten Datei-API (Swoole\Coroutine\System::writeFile) als veraltet markiert. Sie steht nur zur Verfügung, wenn die Swoole-Erweiterung installiert und der asynchrone Modus aktiviert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Zieldatei, in die geschrieben werden soll. Die Datei wird erstellt, wenn sie noch nicht existiert. | |
| $content Pflicht | string | Der zu schreibende Inhalt als Zeichenkette. | |
| $offset | int | -1 | Byte-Offset, ab dem in die Datei geschrieben werden soll. -1 bedeutet, dass am Ende der Datei angehängt wird (Append-Modus). |
| $callback | callable | null | Optionale Rückruffunktion, die nach Abschluss des Schreibvorgangs aufgerufen wird. Sie erhält den Dateinamen (string $filename) als Parameter. |
Rückgabewert
true zurück, wenn der Schreibauftrag erfolgreich in die Warteschlange eingereiht wurde, false im Fehlerfall (z. B. ungültiger Pfad oder Swoole nicht aktiv).Beispiele
Einfaches asynchrones Schreiben mit Callback
<?php
// Swoole-Server oder Event-Loop muss aktiv sein
swoole_async_write('/tmp/log.txt', "Neuer Log-Eintrag\n", -1, function(string $filename) {
echo "Schreiben in {$filename} abgeschlossen.\n";
});
echo "Dieser Code läuft sofort weiter, ohne auf das Schreiben zu warten.\n";
// Event-Loop starten (z. B. innerhalb eines Swoole-Servers automatisch aktiv)
swoole_event_wait();
Schreiben an einer bestimmten Byte-Position
<?php
// Zieldatei vorbereiten
file_put_contents('/tmp/data.bin', str_repeat('\0', 100));
// Ab Byte-Position 10 schreiben
swoole_async_write('/tmp/data.bin', 'HELLO', 10, function(string $filename) {
$content = file_get_contents($filename);
echo "Bytes 10-14 der Datei: " . substr($content, 10, 5) . "\n";
});
swoole_event_wait();
// Wichtig · Fallstricke
Deprecation: swoole_async_write gehört zur älteren callback-basierten Swoole-API und gilt ab Swoole 4.x als veraltet. Für neue Projekte sollte stattdessen die Coroutine-API verwendet werden: Swoole\Coroutine\System::writeFile() innerhalb einer Coroutine oder Co\run()-Umgebung.
Voraussetzung: Die Funktion ist nur verfügbar, wenn die Swoole-Erweiterung installiert ist und ein aktiver Event-Loop läuft. In einer normalen PHP-CLI-Umgebung ohne Swoole steht sie nicht zur Verfügung.
Sicherheit: Der Dateiname wird nicht automatisch validiert oder bereinigt. Bei der Verarbeitung von Nutzereingaben muss der Pfad unbedingt vor Verwendung geprüft werden, um Path-Traversal-Angriffe (../) zu verhindern.