Signatur
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
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();
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();
// 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.