Signatur
Beschreibung
eio_rmdir() entfernt ein leeres Verzeichnis asynchron, ohne den aktuellen PHP-Prozess zu blockieren. Die Funktion ist Teil der eio-Erweiterung, die auf der Bibliothek libeio basiert und effiziente, nicht-blockierende I/O-Operationen für PHP bereitstellt.
Im Gegensatz zur synchronen Funktion rmdir() kehrt eio_rmdir() sofort zurück und liefert eine Ressource, die den ausstehenden Request repräsentiert. Das eigentliche Ergebnis der Operation wird über die $callback-Funktion gemeldet, sobald die Operation abgeschlossen ist.
Typischerweise wird diese Funktion in Kombination mit einem Event-Loop (z. B. ev oder event) verwendet. Das Callback erhält als Parameter das $data-Argument, den Rückgabewert der Operation (0 bei Erfolg, -1 bei Fehler) sowie ggf. Fehlerinformationen über eio_get_last_error(). Das Verzeichnis muss leer sein, ansonsten schlägt die Operation fehl.
Der Parameter $pri steuert die Priorität des Requests in der internen Warteschlange. Sinnvoll ist eio_rmdir() vor allem in hochparallelen Server-Applikationen oder Event-gesteuerten Architekturen, wo blockierende Systemaufrufe vermieden werden sollen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Pfad zum Verzeichnis, das entfernt werden soll. Das Verzeichnis muss leer sein. | |
| $pri | int | EIO_PRI_DEFAULT | Priorität des Requests. Erlaubte Werte: EIO_PRI_DEFAULT, EIO_PRI_MIN, EIO_PRI_MAX oder null (entspricht EIO_PRI_DEFAULT). |
| $callback | callable | NULL | Callback-Funktion, die nach Abschluss der Operation aufgerufen wird. Signatur: callback(mixed $data, int $result, resource $req). $result ist 0 bei Erfolg und -1 bei einem Fehler. |
| $data | mixed | NULL | Beliebige benutzerdefinierte Daten, die unverändert an die Callback-Funktion weitergegeben werden. |
Rückgabewert
eio-Request-Ressource zurück, wenn der Request erfolgreich in die Warteschlange eingereiht wurde, oder false bei einem Fehler.Beispiele
Leeres Verzeichnis asynchron entfernen
<?php
// Voraussetzung: eio-Erweiterung ist geladen
$tmpDir = sys_get_temp_dir() . '/eio_test_' . uniqid();
mkdir($tmpDir);
function my_rmdir_callback($data, $result, $req)
{
if ($result === 0) {
echo "Verzeichnis '{$data}' erfolgreich entfernt." . PHP_EOL;
} else {
echo "Fehler beim Entfernen von '{$data}': " . eio_get_last_error($req) . PHP_EOL;
}
}
eio_rmdir($tmpDir, EIO_PRI_DEFAULT, 'my_rmdir_callback', $tmpDir);
// Event-Loop manuell ausführen, bis alle ausstehenden Requests abgeschlossen sind
eio_event_loop();
Verzeichnis entfernen mit anonymem Callback und Fehlerbehandlung
<?php
$dir = '/tmp/eio_nicht_vorhanden_' . uniqid();
eio_rmdir(
$dir,
EIO_PRI_DEFAULT,
function ($data, $result, $req) {
if ($result === -1) {
echo "Fehler: " . eio_get_last_error($req) . PHP_EOL;
} else {
echo "Verzeichnis entfernt." . PHP_EOL;
}
},
null
);
eio_event_loop();
// Wichtig · Fallstricke
Achtung: Das Verzeichnis muss vollständig leer sein – enthält es noch Dateien oder Unterverzeichnisse, schlägt die Operation mit einem Fehler fehl (analog zu POSIX rmdir()). Für rekursives Löschen muss zunächst der Inhalt entfernt werden.
Die eio-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (PECL). Sie ist unter Windows nicht verfügbar und setzt eine POSIX-kompatible Umgebung voraus.
Ohne einen aktiven Event-Loop (z. B. durch eio_event_loop() oder die Integration mit ev/libevent) werden ausstehende Callbacks nie aufgerufen.