Start · Sprachen · PHP · Referenz · swoole_async_write

swoole_async_write

Funktion

Schreibt Daten asynchron in eine Datei, ohne den aktuellen Prozess zu blockieren.

seit PHP 1.0.0 Kategorie: misc

Signatur

swoole_async_write(string $filename, string $content, int $offset = -1, callable $callback = null): bool

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

Typ
bool
Beschreibung
Gibt 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();
Dieser Code läuft sofort weiter, ohne auf das Schreiben zu warten. Schreiben in /tmp/log.txt abgeschlossen.

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();
Bytes 10-14 der Datei: HELLO

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