Signatur
Beschreibung
dio_stat() gibt ein assoziatives Array mit Statusinformationen über einen Low-Level-Dateideskriptor zurück, der zuvor mit dio_open() geöffnet wurde. Die Funktion ist das direkte I/O-Äquivalent der POSIX-Funktion fstat() und operiert dabei auf Betriebssystemebene, ohne PHP-interne Puffer zu berücksichtigen.
Das zurückgegebene Array enthält Informationen wie Gerätkennung, Inode-Nummer, Dateigröße, Zugriffsrechte sowie Zeitstempel für letzten Zugriff, letzte Änderung und letzten Statuswechsel. Diese Daten entsprechen weitgehend den Feldern der POSIX-Struktur stat.
dio_stat() ist besonders nützlich, wenn man direkt mit Dateideskriptoren auf Systemebene arbeitet – etwa bei seriellen Schnittstellen, Gerätedateien oder in Situationen, in denen der PHP-Stream-Wrapper nicht verwendet werden soll. Die Funktion steht nur auf POSIX-kompatiblen Systemen (Linux, macOS, BSD) zur Verfügung.
Zu beachten ist, dass das PECL-Paket dio installiert sein muss, da diese Funktionen nicht zum PHP-Kern gehören.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fd Pflicht | resource | Ein gültiger Dateideskriptor, der zuvor mit dio_open() geöffnet wurde. |
Rückgabewert
Gibt im Erfolgsfall ein assoziatives Array mit folgenden Schlüsseln zurück:
device– Gerätkennung (int)inode– Inode-Nummer (int)mode– Dateimodus/Zugriffsrechte (int)nlink– Anzahl der Hardlinks (int)uid– Benutzer-ID des Eigentümers (int)gid– Gruppen-ID des Eigentümers (int)device_type– Gerätetyp, falls Sonderdatei (int)size– Dateigröße in Bytes (int)blocksize– Blockgröße des Dateisystems (int)blocks– Anzahl der belegten Blöcke (int)atime– Zeitstempel des letzten Zugriffs (int, Unix-Timestamp)mtime– Zeitstempel der letzten Änderung (int, Unix-Timestamp)ctime– Zeitstempel des letzten Statuswechsels (int, Unix-Timestamp)
Bei einem Fehler oder ungültigem Dateideskriptor wird null zurückgegeben.
Beispiele
Grundlegende Verwendung von dio_stat()
<?php
// Datei öffnen mit dio_open()
$fd = dio_open('/tmp/testdatei.txt', O_RDWR | O_CREAT, 0644);
if ($fd === false) {
die('Datei konnte nicht geöffnet werden.');
}
// Statusinformationen abrufen
$stat = dio_stat($fd);
if ($stat !== null) {
echo 'Dateigröße: ' . $stat['size'] . ' Bytes' . PHP_EOL;
echo 'Inode: ' . $stat['inode'] . PHP_EOL;
echo 'Modus: ' . decoct($stat['mode']) . PHP_EOL;
echo 'Letzter Zugriff: ' . date('Y-m-d H:i:s', $stat['atime']) . PHP_EOL;
echo 'Letzte Änderung: ' . date('Y-m-d H:i:s', $stat['mtime']) . PHP_EOL;
} else {
echo 'Fehler beim Abrufen der Statusinformationen.';
}
dio_close($fd);
Prüfen, ob sich die Dateigröße nach einem Schreibvorgang geändert hat
<?php
$datei = '/tmp/dio_test.txt';
$fd = dio_open($datei, O_RDWR | O_CREAT | O_TRUNC, 0644);
if ($fd === false) {
die('Konnte Datei nicht öffnen.');
}
$statVorher = dio_stat($fd);
echo 'Größe vorher: ' . $statVorher['size'] . ' Bytes' . PHP_EOL;
// Daten in die Datei schreiben
dio_write($fd, 'Hallo, direkte I/O-Welt!');
$statNachher = dio_stat($fd);
echo 'Größe nachher: ' . $statNachher['size'] . ' Bytes' . PHP_EOL;
dio_close($fd);
// Wichtig · Fallstricke
Verfügbarkeit: dio_stat() ist Teil der PECL-Erweiterung dio und steht nur auf POSIX-kompatiblen Systemen (Linux, macOS, BSD) zur Verfügung. Unter Windows ist diese Funktion nicht nutzbar.
Installation: Das PECL-Paket muss separat installiert werden: pecl install dio. In der php.ini muss danach extension=dio.so (bzw. dio.dll) eingetragen werden.
Unterschied zu fstat(): Die PHP-Funktion fstat() arbeitet mit Stream-Ressourcen (geöffnet via fopen()), während dio_stat() mit rohen, ungepufferten Dateideskriptoren operiert. Für normale Dateizugriffe in PHP ist fstat() vorzuziehen.