Start · Sprachen · PHP · Referenz · eio_stat

eio_stat

Funktion

Liest den Dateistatus (ähnlich <code>stat()</code>) asynchron über die EIO-Erweiterung und liefert das Ergebnis via Callback.

seit PHP 1.0.0 Kategorie: io

Signatur

eio_stat(string $path, int $pri, callable $callback, mixed $data = null): resource|false

Beschreibung

eio_stat() ermittelt asynchron Metadaten einer Datei oder eines Verzeichnisses – analog zur blockierenden PHP-Funktion stat(). Die Operation wird in einem Thread-Pool ausgeführt, sodass der Hauptprozess nicht blockiert wird. Das Ergebnis wird über einen Callback geliefert, sobald die Operation abgeschlossen ist.

Die Funktion gehört zur EIO-Erweiterung (PECL), die auf der libeio-Bibliothek basiert und asynchrone POSIX-I/O-Operationen für PHP ermöglicht. Sie ist besonders sinnvoll in ereignisgesteuerten Anwendungen (z. B. mit libevent oder ReactPHP), bei denen blockierende Systemaufrufe vermieden werden sollen.

Der Callback erhält als zweites Argument ein assoziatives Array mit denselben Feldern wie stat() (z. B. dev, ino, mode, nlink, uid, gid, size, atime, mtime, ctime usw.).

Im Gegensatz zu lstat() folgt eio_stat() symbolischen Links und liefert die Daten der verlinkten Zieldatei. Für symbolische Links selbst steht eio_lstat() zur Verfügung.

Parameter

Name Typ Default Beschreibung
$path Pflicht string Pfad zur Datei oder zum Verzeichnis, deren Metadaten abgerufen werden sollen.
$pri Pflicht int Priorität der Anfrage. Mögliche Werte: EIO_PRI_DEFAULT, EIO_PRI_MIN, EIO_PRI_MAX oder null (entspricht EIO_PRI_DEFAULT).
$callback Pflicht callable Callback-Funktion mit der Signatur callback(mixed $data, mixed $result, resource $req). $result enthält bei Erfolg ein assoziatives Array mit den Stat-Feldern, bei Fehler -1. $data ist der optionale benutzerdefinierte Wert.
$data mixed null Beliebige benutzerdefinierte Daten, die unverändert an den Callback weitergegeben werden. Nützlich zur Kontextübergabe.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine EIO-Anfrage-Ressource zurück, mit der die Anfrage z. B. via eio_cancel() abgebrochen werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Dateigröße und Änderungszeitpunkt asynchron auslesen

<?php
// EIO-Loop-Handler registrieren (hier vereinfacht mit eio_event_loop)
eio_stat('/var/www/html/index.php', EIO_PRI_DEFAULT, function ($data, $result, $req) {
    if ($result === -1) {
        echo 'Fehler beim Lesen der Datei-Metadaten: ' . eio_get_last_error($req) . PHP_EOL;
        return;
    }
    echo 'Dateigröße : ' . $result['size'] . ' Bytes' . PHP_EOL;
    echo 'Letzte Änderung: ' . date('Y-m-d H:i:s', $result['mtime']) . PHP_EOL;
    echo 'Berechtigungen: ' . decoct($result['mode']) . PHP_EOL;
}, null);

eio_event_loop();
Dateigröße : 4096 Bytes Letzte Änderung: 2024-03-15 10:22:00 Berechtigungen: 100644

Kontext-Daten an den Callback übergeben

<?php
$files = [
    '/etc/hostname',
    '/etc/os-release',
];

foreach ($files as $file) {
    eio_stat($file, EIO_PRI_DEFAULT, function ($data, $result, $req) {
        if ($result === -1) {
            echo "Fehler bei: {$data}" . PHP_EOL;
            return;
        }
        echo "Datei '{$data}': " . $result['size'] . " Bytes, Mode: " . decoct($result['mode']) . PHP_EOL;
    }, $file); // $file wird als $data weitergegeben
}

eio_event_loop();
Datei '/etc/hostname': 12 Bytes, Mode: 100644 Datei '/etc/os-release': 387 Bytes, Mode: 100644

// Wichtig · Fallstricke

PECL-Erweiterung: eio_stat() ist Teil der EIO-PECL-Erweiterung und nicht im PHP-Kern enthalten. Sie muss separat installiert werden (pecl install eio).

Plattformunterstützung: Die EIO-Erweiterung funktioniert nur auf POSIX-kompatiblen Systemen (Linux, macOS, BSD). Unter Windows ist sie nicht verfügbar.

Fehlerbehandlung: Wenn $result === -1, ist die Operation fehlgeschlagen. Der genaue Fehlercode kann mit eio_get_last_error($req) abgerufen werden.

Symbolische Links: eio_stat() folgt symbolischen Links. Um Metadaten des Links selbst zu erhalten, verwende stattdessen eio_lstat().