Start · Sprachen · PHP · Referenz · fileatime

fileatime

Funktion

Gibt den Unix-Zeitstempel des letzten Zugriffs auf eine Datei zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

fileatime(string $filename): int|false

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

Typ
int|false
Beschreibung
Gibt den Unix-Zeitstempel des letzten Zugriffs als 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);
}
?>
Letzter Zugriff: 15.04.2024 10:23:45

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);
    }
}
?>
Lösche veraltete Cache-Datei: /var/www/html/cache/seite_startseite.cache

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