Neben dem eigentlichen Inhalt speichert das Dateisystem zu jeder Datei zusätzliche Informationen: Größe, Zeitstempel, Zugriffsrechte und mehr. PHP stellt eine ganze Reihe von Funktionen bereit, um diese Metadaten abzufragen. Die gängigsten Funktionen werden hier mit Praxisbeispielen vorgestellt.
Dateigröße ermitteln mit filesize()
Die Funktion filesize() gibt die Größe einer Datei in Bytes zurück. Für eine lesbare Ausgabe müssen die Bytes in KB, MB oder GB umgerechnet werden.
<?php
$datei = 'uploads/bericht.pdf';
if (file_exists($datei)) {
$bytes = filesize($datei);
echo $datei . ': ' . $bytes . ' Bytes';
/* Ausgabe z.B.: uploads/bericht.pdf: 245760 Bytes */
}
?>
Eine kleine Hilfsfunktion macht die Ausgabe benutzerfreundlicher:
<?php
function formatBytes(int $bytes): string
{
if ($bytes >= 1048576) {
return round($bytes / 1048576, 2) . ' MB';
}
if ($bytes >= 1024) {
return round($bytes / 1024, 2) . ' KB';
}
return $bytes . ' Bytes';
}
echo formatBytes(filesize('bericht.pdf'));
/* Ausgabe z.B.: 240 KB */
?>
Änderungsdatum abfragen mit filemtime()
Die Funktion filemtime() gibt den Unix-Zeitstempel der letzten Änderung zurück. Mit date() lässt sich dieser Zeitstempel in ein lesbares Format umwandeln.
<?php
$datei = 'config.php';
$zeit = filemtime($datei);
echo 'Letzte Änderung: ' . date('d.m.Y H:i', $zeit);
/* Ausgabe z.B.: Letzte Änderung: 15.02.2026 09:32 */
?>
Neben filemtime() gibt es zwei verwandte Funktionen: fileatime() liefert den Zeitpunkt des letzten Zugriffs und filectime() den Zeitpunkt der letzten Statusänderung (zum Beispiel Rechteänderungen).
Dateityp und Existenz prüfen
Bevor man auf eine Datei zugreift, sollte geprüft werden, ob sie überhaupt existiert und ob es sich tatsächlich um eine Datei handelt. PHP bietet dafür mehrere Prüffunktionen.
<?php
$pfad = 'daten/export.csv';
echo file_exists($pfad) ? 'Existiert' : 'Nicht gefunden';
echo is_file($pfad) ? 'Ist eine Datei' : 'Keine Datei';
echo is_dir($pfad) ? 'Ist ein Verzeichnis' : 'Kein Verzeichnis';
echo is_readable($pfad) ? 'Lesbar' : 'Nicht lesbar';
echo is_writable($pfad) ? 'Beschreibbar' : 'Nicht beschreibbar';
?>
Der Unterschied zwischen file_exists() und is_file(): file_exists() gibt true zurück, wenn der Pfad existiert, egal ob es eine Datei oder ein Verzeichnis ist. is_file() gibt nur true zurück, wenn es sich um eine reguläre Datei handelt.
Alle Informationen auf einmal mit stat()
Die Funktion stat() liefert alle verfügbaren Metadaten einer Datei in einem einzigen Array. Die Werte sind sowohl über numerische als auch über benannte Schlüssel erreichbar.
<?php
$info = stat('index.php');
if ($info !== false) {
echo 'Größe: ' . $info['size'] . ' Bytes';
echo 'Letzte Änderung: '
. date('d.m.Y H:i', $info['mtime']);
echo 'Letzter Zugriff: '
. date('d.m.Y H:i', $info['atime']);
}
?>
Die wichtigsten Schlüssel im stat()-Array sind size (Dateigröße in Bytes), mtime (letzte Änderung), atime (letzter Zugriff), ctime (letzte Statusänderung) und mode (Dateiberechtigungen). Die Einzelfunktionen wie filesize() und filemtime() sind in den meisten Fällen bequemer. stat() lohnt sich, wenn mehrere Informationen gleichzeitig benötigt werden, da so nur ein Systemaufruf erfolgt.
Praxisbeispiel: Dateiliste mit Details
Das folgende Beispiel liest alle PHP-Dateien aus einem Verzeichnis und gibt sie mit Größe und Änderungsdatum aus.
<?php
$dateien = glob('src/*.php');
foreach ($dateien as $datei) {
$groesse = filesize($datei);
$geaendert = filemtime($datei);
echo basename($datei)
. ' | ' . formatBytes($groesse)
. ' | ' . date('d.m.Y H:i', $geaendert)
. PHP_EOL;
}
/*
Ausgabe z.B.:
index.php | 3.42 KB | 10.02.2026 14:22
config.php | 1.08 KB | 05.01.2026 09:15
*/
?>
Stat-Cache beachten: clearstatcache()
PHP speichert die Ergebnisse von Dateifunktionen in einem internen Cache. Wenn sich eine Datei während der Script-Laufzeit ändert, können die gecachten Werte veraltet sein. Mit clearstatcache() wird der Cache geleert.
<?php
$datei = 'log.txt';
echo filesize($datei); // z.B. 1024
/* Datei wird anderweitig verändert ... */
file_put_contents($datei, 'Neuer Inhalt');
echo filesize($datei);
/* Zeigt möglicherweise noch 1024 (gecacht) */
clearstatcache();
echo filesize($datei);
/* Zeigt jetzt den korrekten neuen Wert */
?>
In den meisten Fällen ist der Cache kein Problem, weil er nur innerhalb eines einzelnen Script-Durchlaufs gilt. Relevant wird er, wenn eine Datei gelesen, verändert und anschließend erneut geprüft wird.