Start · Sprachen · PHP · Referenz · eio_fstatvfs

eio_fstatvfs

Funktion

Gibt Dateisystemstatistiken für ein geöffnetes Datei-Deskriptor zurück (asynchron via eio-Erweiterung).

seit PHP 1.0.0 Kategorie: io

Signatur

eio_fstatvfs(mixed $fd, int $pri, callable $callback, mixed $data = null): resource

Beschreibung

eio_fstatvfs() gehört zur eio-Erweiterung, die auf der libeio-Bibliothek basiert und asynchrone I/O-Operationen für PHP ermöglicht. Die Funktion ruft Dateisystem-Statistiken ab, die dem POSIX-Aufruf fstatvfs() entsprechen – anhand eines bereits geöffneten Datei-Deskriptors.

Die Ergebnisse werden nicht direkt zurückgegeben, sondern asynchron an die angegebene $callback-Funktion übergeben. Das Callback erhält unter anderem Informationen wie Block-Größe, freie Blöcke, verfügbare Blöcke sowie die Gesamtanzahl von Dateisystem-Inodes. Damit lässt sich beispielsweise der freie Speicherplatz eines Dateisystems ermitteln.

Typische Einsatzgebiete sind Server-Monitoring-Skripte, Deployment-Tools oder jede Anwendung, die Speicherplatz-Informationen benötigt, ohne den Haupt-Thread durch synchrone Systemaufrufe zu blockieren. eio_fstatvfs() ist besonders nützlich, wenn bereits ein Datei-Handle vorhanden ist und man so auf einen extra statvfs()-Aufruf verzichten möchte.

Wichtig: Die eio-Funktionen erfordern eine Event-Loop (z. B. via eio_event_loop()), damit die Callbacks tatsächlich ausgeführt werden.

Parameter

Name Typ Default Beschreibung
$fd Pflicht mixed Ein geöffneter Datei-Deskriptor, z. B. zurückgegeben von eio_open() oder einer ähnlichen eio-Funktion.
$pri Pflicht int Priorität der Anfrage. Mögliche Werte: EIO_PRI_DEFAULT, EIO_PRI_MIN, EIO_PRI_MAX.
$callback Pflicht callable Callback-Funktion der Form function(mixed $data, mixed $result): void. $result enthält bei Erfolg ein assoziatives Array mit den Dateisystem-Statistiken (z. B. f_bsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree), bei Fehler false.
$data mixed null Beliebige benutzerdefinierte Daten, die unverändert an das Callback weitergereicht werden. Nützlich, um Kontext mitzugeben.

Rückgabewert

Typ
resource
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

Freien Speicherplatz eines Dateisystems ermitteln

<?php
// eio-Erweiterung muss installiert sein

$path = '/tmp/testdatei.txt';

// Datei öffnen (asynchron)
eio_open(
    $path,
    EIO_O_RDONLY | EIO_O_CREAT,
    0644,
    EIO_PRI_DEFAULT,
    function ($data, $fd, $req) {
        if ($fd === false) {
            echo "Fehler beim Öffnen der Datei.\n";
            return;
        }

        // Dateisystem-Statistiken abrufen
        eio_fstatvfs(
            $fd,
            EIO_PRI_DEFAULT,
            function ($data, $result) use ($fd) {
                if ($result === false) {
                    echo "Fehler beim Abrufen der Statistiken.\n";
                } else {
                    $blockSize   = $result['f_frsize'];   // Blockgröße in Bytes
                    $freeBlocks  = $result['f_bavail'];   // Verfügbare Blöcke (für normale User)
                    $freeMB      = ($blockSize * $freeBlocks) / (1024 * 1024);
                    echo sprintf(
                        "Freier Speicher: %.2f MB\n",
                        $freeMB
                    );
                }
                // Datei-Deskriptor schließen
                eio_close($fd, EIO_PRI_DEFAULT, null);
            },
            null
        );
    }
);

// Event-Loop starten, damit Callbacks verarbeitet werden
eio_event_loop();
Freier Speicher: 4521.75 MB

Inode-Informationen abfragen und Kontext-Daten nutzen

<?php
$context = ['label' => 'Produktions-Partition'];

eio_open(
    '/var/log/syslog',
    EIO_O_RDONLY,
    0,
    EIO_PRI_DEFAULT,
    function ($data, $fd, $req) {
        eio_fstatvfs(
            $fd,
            EIO_PRI_DEFAULT,
            function ($data, $result) use ($fd) {
                if (is_array($result)) {
                    echo "Label: {$data['label']}\n";
                    echo "Gesamt-Inodes : {$result['f_files']}\n";
                    echo "Freie Inodes  : {$result['f_ffree']}\n";
                }
                eio_close($fd, EIO_PRI_DEFAULT, null);
            },
            $data  // Kontext weitergeben
        );
    },
    $context
);

eio_event_loop();
Label: Produktions-Partition Gesamt-Inodes : 1310720 Freie Inodes : 987432

// Wichtig · Fallstricke

Erweiterung erforderlich: eio_fstatvfs() steht nur zur Verfügung, wenn die eio PECL-Erweiterung installiert und geladen ist. Sie ist nicht Teil der PHP-Standardinstallation.

Event-Loop: Ohne Aufruf von eio_event_loop() (oder Integration in eine andere Event-Loop wie libevent oder libuv) werden die Callbacks niemals ausgeführt.

Felder im Ergebnis-Array: Die zurückgegebenen Schlüssel entsprechen der POSIX-struct statvfs, u. a. f_bsize (bevorzugte Blockgröße), f_frsize (fundamentale Blockgröße), f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_fsid, f_flag, f_namemax. Die Verfügbarkeit einzelner Felder hängt vom Betriebssystem ab.

Fehlerbehandlung: Bei einem Fehler liefert das Callback false als $result. Der Fehlercode ist dann über eio_get_last_error($req) abrufbar, sofern die Anfrage-Ressource im Callback verfügbar ist.