Start · Sprachen · PHP · Referenz · fileinode

fileinode

Funktion

Gibt die Inode-Nummer einer Datei auf dem Dateisystem zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

fileinode(string $filename): int|false

Beschreibung

fileinode() ermittelt die Inode-Nummer einer Datei auf Unix-artigen Dateisystemen. Jede Datei besitzt dort eine eindeutige Inode-Nummer innerhalb ihres Dateisystems, über die das Betriebssystem Metadaten wie Berechtigungen, Eigentümer und Zeitstempel verwaltet. Zwei Hardlinks auf dieselbe Datei teilen sich immer dieselbe Inode-Nummer.

Die Funktion ist besonders nützlich, wenn geprüft werden soll, ob zwei Dateipfade auf dieselbe physische Datei zeigen (z. B. bei Hardlinks), oder wenn Dateien anhand ihrer Inode identifiziert werden müssen, ohne sich auf den Dateinamen zu verlassen. In Kombination mit filedev() lässt sich eine dateisystemweit eindeutige Identität einer Datei bilden.

Unter Windows gibt fileinode() immer 0 zurück, da Windows kein Inode-Konzept im Unix-Sinne kennt. Die Funktion ist daher vor allem auf Linux- und macOS-Systemen sinnvoll einzusetzen.

Wie die meisten Dateisystem-Funktionen nutzt PHP intern einen Stat-Cache. Wenn sich die Datei während der Laufzeit ändert, sollte clearstatcache() aufgerufen werden, um veraltete Werte zu vermeiden.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei, deren Inode-Nummer ermittelt werden soll. Kann ein relativer oder absoluter Dateipfad sein.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Inode-Nummer als int zurück, oder false bei einem Fehler (z. B. wenn die Datei nicht existiert oder nicht zugänglich ist).

Beispiele

Inode-Nummer einer Datei ausgeben

<?php
$datei = '/etc/hostname';
$inode = fileinode($datei);

if ($inode !== false) {
    echo "Inode von '{$datei}': {$inode}" . PHP_EOL;
} else {
    echo "Inode konnte nicht ermittelt werden." . PHP_EOL;
}
Inode von '/etc/hostname': 131073

Prüfen, ob zwei Pfade auf dieselbe Datei zeigen (Hardlink-Erkennung)

<?php
$pfad1 = '/tmp/original.txt';
$pfad2 = '/tmp/hardlink.txt';

// Testdateien anlegen
file_put_contents($pfad1, 'Inhalt');
link($pfad1, $pfad2); // Hardlink erstellen

$inode1 = fileinode($pfad1);
$inode2 = fileinode($pfad2);

if ($inode1 !== false && $inode2 !== false && $inode1 === $inode2) {
    echo "Beide Pfade zeigen auf dieselbe Datei (Inode: {$inode1})." . PHP_EOL;
} else {
    echo "Die Pfade zeigen auf unterschiedliche Dateien." . PHP_EOL;
}

unlink($pfad2);
unlink($pfad1);
Beide Pfade zeigen auf dieselbe Datei (Inode: 393217).

// Wichtig · Fallstricke

Windows: Unter Windows gibt fileinode() stets 0 zurück, da das NTFS-Dateisystem kein Unix-kompatibles Inode-Konzept verwendet. Portabler Code sollte dies berücksichtigen.

Stat-Cache: PHP cached intern die Ergebnisse von Dateisystem-Abfragen. Wenn eine Datei während der Ausführung verändert wird, kann clearstatcache() nötig sein, um aktuelle Werte zu erhalten.

Für eine dateisystemweit eindeutige Identifikation sollte die Inode-Nummer stets in Kombination mit der Gerätenummer aus filedev() verwendet werden, da Inode-Nummern nur innerhalb eines Dateisystems eindeutig sind.