Start · Sprachen · PHP · Referenz · dio_stat

dio_stat

Funktion

Liefert Statusinformationen (Metadaten) über einen durch <code>dio_open()</code> geöffneten Dateideskriptor.

seit PHP 4.2.0 Kategorie: io

Signatur

dio_stat(resource $fd): array|null

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

Typ
array|null
Beschreibung

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);
Dateigröße: 0 Bytes Inode: 123456 Modus: 100644 Letzter Zugriff: 2024-05-10 14:23:01 Letzte Änderung: 2024-05-10 14:23:01

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);
Größe vorher: 0 Bytes Größe nachher: 24 Bytes

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