Start · Sprachen · PHP · Referenz · filectime

filectime

Funktion

Gibt den Zeitstempel der letzten Inode-Änderung einer Datei als Unix-Timestamp zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

filectime(string $filename): int|false

Beschreibung

filectime() liefert den Zeitstempel der letzten Änderung des Inodes einer Datei. Unter Unix/Linux umfasst das nicht nur Dateiinhalt-Änderungen, sondern auch Metadaten-Änderungen wie Berechtigungen, Eigentümer oder Hardlink-Anzahl. Unter Windows wird dieser Wert häufig als Erstellungszeit der Datei interpretiert, da Windows kein klassisches Unix-Inode-Konzept kennt.

Der Rückgabewert ist ein Unix-Timestamp (Sekunden seit dem 1. Januar 1970 00:00:00 UTC), der sich direkt mit Datums- und Zeitfunktionen wie date() oder DateTime verarbeiten lässt. Ist die Datei nicht lesbar oder existiert sie nicht, wird false zurückgegeben und ein Fehler der Stufe E_WARNING ausgelöst.

PHP speichert Ergebnisse von Dateisystemfunktionen im internen Stat-Cache. Wer im selben Skript-Durchlauf aktuelle Werte benötigt, sollte vorher clearstatcache() aufrufen, damit veraltete Cache-Einträge nicht zurückgegeben werden.

Typische Anwendungsfälle sind das Erkennen von Berechtigungs- oder Eigentümeränderungen sowie das Überwachen von Konfigurationsdateien auf Systemebene — für reine Inhalts-Änderungen ist filemtime() die bessere Wahl.

Parameter

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

Rückgabewert

Typ
int|false
Beschreibung
Gibt den Unix-Timestamp der letzten Inode-Änderung als int zurück. Bei einem Fehler (z. B. Datei nicht vorhanden oder keine Leseberechtigung) wird false zurückgegeben.

Beispiele

Inode-Änderungszeitpunkt einer Datei anzeigen

<?php
$datei = '/etc/hosts';

$ctime = filectime($datei);

if ($ctime !== false) {
    echo 'Letzte Inode-Änderung: ' . date('d.m.Y H:i:s', $ctime) . PHP_EOL;
} else {
    echo 'Datei nicht gefunden oder nicht lesbar.' . PHP_EOL;
}
Letzte Inode-Änderung: 14.03.2024 10:22:45

Vergleich von filectime und filemtime

<?php
$datei = 'beispiel.txt';

// Sicherstellen, dass der Stat-Cache geleert ist
clearstatcache();

$ctime = filectime($datei);
$mtime = filemtime($datei);

if ($ctime !== false && $mtime !== false) {
    echo 'Inode-Änderung (ctime): ' . date('d.m.Y H:i:s', $ctime) . PHP_EOL;
    echo 'Inhalts-Änderung (mtime): ' . date('d.m.Y H:i:s', $mtime) . PHP_EOL;

    if ($ctime > $mtime) {
        echo 'Metadaten wurden nach der letzten Inhaltsänderung geändert.' . PHP_EOL;
    }
}
Inode-Änderung (ctime): 15.03.2024 08:15:00 Inhalts-Änderung (mtime): 14.03.2024 17:42:30 Metadaten wurden nach der letzten Inhaltsänderung geändert.

Erkennen kürzlich geänderter Dateien in einem Verzeichnis

<?php
$verzeichnis = '/var/www/html';
$schwelle = time() - 3600; // letzte Stunde

foreach (new DirectoryIterator($verzeichnis) as $dateiInfo) {
    if ($dateiInfo->isDot() || !$dateiInfo->isFile()) {
        continue;
    }

    $ctime = filectime($dateiInfo->getPathname());

    if ($ctime !== false && $ctime >= $schwelle) {
        echo $dateiInfo->getFilename()
            . ' — Inode geändert: '
            . date('H:i:s', $ctime)
            . PHP_EOL;
    }
}
config.php — Inode geändert: 09:44:12 index.php — Inode geändert: 10:01:55

// Wichtig · Fallstricke

Plattformunterschiede: Auf Windows-Systemen entspricht filectime() der Erstellungszeit der Datei, nicht der Inode-Änderungszeit, da NTFS ein anderes Metadaten-Konzept verwendet. Portabler Code sollte das berücksichtigen.

Stat-Cache: PHP cached intern die Ergebnisse von Dateisystem-Stat-Aufrufen. Wenn eine Datei im selben Skript-Lauf verändert wurde oder mehrfach geprüft werden soll, muss clearstatcache() aufgerufen werden, um sicherzustellen, dass aktuelle Werte abgerufen werden.

Kein Erstellungszeitpunkt: Unter Linux/Unix gibt es keine native Möglichkeit, den ursprünglichen Erstellungszeitpunkt einer Datei auszulesen. filectime() ist nicht die Erstellungszeit, sondern die letzte Inode-Änderungszeit.