Signatur
Beschreibung
swoole_async_writefile() ist eine asynchrone Datei-Schreibfunktion aus der Swoole-Erweiterung. Sie schreibt den angegebenen Inhalt in eine Datei, ohne den laufenden PHP-Prozess oder Event-Loop zu blockieren. Das Ergebnis der Schreiboperation wird über eine Callback-Funktion gemeldet, sobald der Vorgang abgeschlossen ist.
Diese Funktion ist besonders nützlich in asynchronen, hochperformanten Swoole-Servern (z. B. HTTP- oder WebSocket-Server), wo blockierende I/O-Operationen die Performance erheblich beeinträchtigen würden. Statt auf den Abschluss der Schreiboperation zu warten, kann der Event-Loop weiterarbeiten und andere Anfragen bearbeiten.
Im Gegensatz zu file_put_contents() erfolgt die Schreiboperation im Hintergrund. Wenn der optionale $flags-Parameter auf FILE_APPEND gesetzt wird, wird der Inhalt an eine bestehende Datei angehängt, anstatt sie zu überschreiben.
Hinweis: Diese Funktion ist veraltet und wurde in neueren Swoole-Versionen durch die Coroutine-basierte Datei-I/O-API (Swoole\Coroutine\System::writeFile()) ersetzt. Sie sollte in neuen Projekten nicht mehr verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Der vollständige Pfad zur Zieldatei, in die geschrieben werden soll. | |
| $content Pflicht | string | Der Inhalt (als String), der in die Datei geschrieben werden soll. | |
| $callback | callable | null | Eine Callback-Funktion, die nach Abschluss der Schreiboperation aufgerufen wird. Sie erhält den Dateinamen als Parameter: function(string $filename): void. |
| $flags | int | 0 | Optionale Flags. Wird FILE_APPEND übergeben, wird der Inhalt an die bestehende Datei angehängt statt sie zu überschreiben. |
Rückgabewert
true zurück, wenn die asynchrone Schreiboperation erfolgreich in die Warteschlange eingereiht wurde, andernfalls false.Beispiele
Einfaches asynchrones Schreiben in eine Datei
<?php
// Swoole HTTP-Server mit asynchronem Datei-Schreiben
$server = new Swoole\Http\Server('127.0.0.1', 9501);
$server->on('request', function ($request, $response) {
$logEntry = date('Y-m-d H:i:s') . ' - ' . $request->server['remote_addr'] . PHP_EOL;
swoole_async_writefile(
'/var/log/swoole_access.log',
$logEntry,
function (string $filename) {
echo "Erfolgreich in {$filename} geschrieben." . PHP_EOL;
},
FILE_APPEND
);
$response->end('Anfrage erhalten!');
});
$server->start();
Dateiinhalt vollständig überschreiben
<?php
// Konfigurationsdatei asynchron schreiben (überschreiben)
$config = json_encode(['debug' => false, 'version' => '2.0'], JSON_PRETTY_PRINT);
swoole_async_writefile(
'/tmp/app_config.json',
$config,
function (string $filename) {
echo "Konfiguration in {$filename} gespeichert." . PHP_EOL;
}
// Kein FILE_APPEND => Datei wird überschrieben
);
echo "Schreiboperation wurde eingeleitet, der Prozess läuft weiter...";
// Wichtig · Fallstricke
Deprecation-Hinweis: swoole_async_writefile() gilt in neueren Swoole-Versionen (ab 4.x) als veraltet. Es wird empfohlen, stattdessen die Coroutine-basierte API Swoole\Coroutine\System::writeFile() zu verwenden, die sauberer in das Coroutine-Modell integriert ist.
Nur innerhalb von Swoole: Diese Funktion steht ausschließlich zur Verfügung, wenn die swoole-Erweiterung geladen ist. Sie funktioniert nicht in einem normalen PHP-CLI- oder FPM-Kontext.
Dateigröße: Das asynchrone Schreiben ist für kleinere Dateien optimiert. Bei sehr großen Dateien (mehrere MB) kann es zu erhöhtem Speicherverbrauch kommen, da der gesamte Inhalt als String im Speicher gehalten wird.
Schreibreihenfolge: Bei mehrfachem Aufruf für dieselbe Datei ohne FILE_APPEND sind Race Conditions möglich, da die Reihenfolge der asynchronen Schreiboperationen nicht garantiert ist.