Start · Sprachen · PHP · Referenz · eio_rmdir

eio_rmdir

Funktion

Entfernt ein Verzeichnis asynchron mittels der <code>eio</code>-Erweiterung (libev/libeio).

seit PHP 0.0.1dev Kategorie: io

Signatur

eio_rmdir(string $path, int $pri = EIO_PRI_DEFAULT, callable $callback = NULL, mixed $data = NULL): resource|false

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

Typ
resource|false
Beschreibung
Gibt eine 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 '/tmp/eio_test_abc123' erfolgreich entfernt.

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();
Fehler: No such file or directory

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