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