Signatur
Beschreibung
fileatime() liest den sogenannten Access Time-Stempel (atime) einer Datei aus dem Dateisystem und gibt ihn als Unix-Zeitstempel (Sekunden seit dem 1. Januar 1970 UTC) zurück. Dieser Wert wird vom Betriebssystem aktualisiert, sobald der Dateiinhalt gelesen wird – z. B. durch fread(), file_get_contents() oder ein externes Programm.
Ein typischer Anwendungsfall ist die Überprüfung, wann eine Datei zuletzt genutzt wurde, etwa um veraltete Cache-Dateien oder ungenutzte Uploads zu identifizieren und aufzuräumen. Der Rückgabewert lässt sich direkt mit date() oder DateTime in ein lesbares Datum umwandeln.
Achtung: Auf vielen modernen Linux-Systemen ist das Dateisystem mit der Option noatime oder relatime eingehängt, um Performance-Einbußen durch häufige Schreibzugriffe zu vermeiden. In diesem Fall wird der atime-Wert nicht oder nur eingeschränkt aktualisiert, weshalb fileatime() unter Umständen veraltete oder irreführende Werte liefert.
Die Funktion nutzt intern einen Stat-Cache. Bei wiederholten Aufrufen innerhalb eines Skriptlaufs sollte clearstatcache() aufgerufen werden, um sicherzustellen, dass aktuelle Werte gelesen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei, deren letzter Zugriffszeitstempel ermittelt werden soll. Kann ein relativer oder absoluter Dateipfad sein. |
Rückgabewert
int zurück. Bei einem Fehler (z. B. Datei nicht gefunden oder fehlende Leserechte) wird false zurückgegeben und eine Warnung ausgegeben.Beispiele
Letzten Zugriffszeitpunkt einer Datei anzeigen
<?php
$datei = '/var/www/html/uploads/bild.jpg';
$atime = fileatime($datei);
if ($atime === false) {
echo 'Zugriffszeitpunkt konnte nicht ermittelt werden.';
} else {
echo 'Letzter Zugriff: ' . date('d.m.Y H:i:s', $atime);
}
?>
Ungenutzte Cache-Dateien aufspüren und löschen
<?php
$cacheDir = '/var/www/html/cache/';
$maxAlterSekunden = 7 * 24 * 3600; // 7 Tage
$jetzt = time();
foreach (glob($cacheDir . '*.cache') as $datei) {
clearstatcache(true, $datei);
$atime = fileatime($datei);
if ($atime !== false && ($jetzt - $atime) > $maxAlterSekunden) {
echo "Lösche veraltete Cache-Datei: $datei\n";
unlink($datei);
}
}
?>
// Wichtig · Fallstricke
noatime / relatime: Auf Linux-Systemen mit dem Mount-Flag noatime wird der atime-Stempel beim Lesen einer Datei nicht aktualisiert. Mit relatime wird er nur aktualisiert, wenn er älter als der mtime-Wert ist. Für zuverlässige Zeitstempel sollte stattdessen filemtime() (Änderungszeitpunkt) geprüft werden.
Stat-Cache: PHP cached die Ergebnisse von Stat-Aufrufen intern. Nach Dateioperationen, die den atime-Wert ändern könnten, muss clearstatcache() aufgerufen werden, um veraltete gecachte Werte zu vermeiden.
Windows: Auf Windows-Systemen wird der Zugriffszeitpunkt standardmäßig ebenfalls nur eingeschränkt aktualisiert, da dies in der Registrierung deaktiviert sein kann.