Signatur
Beschreibung
SplFileInfo kapselt sämtliche Metadaten einer Datei oder eines Verzeichnisses (Pfad, Größe, Typ, Berechtigungen, Zeitstempel) in einem komfortablen Objekt. Sie dient als Basisklasse für SplFileObject und SplTempFileObject und wird außerdem von Iterator-Klassen wie DirectoryIterator, RecursiveDirectoryIterator und FilesystemIterator verwendet – dort repräsentiert jedes Element bei der Iteration eine Instanz (oder Unterklasse) von SplFileInfo.
Typische Anwendungsfälle sind das Auflisten von Verzeichnissen, das Filtern nach Dateityp oder Endung, das Ermitteln von Dateigröße und Änderungsdatum sowie das sichere Öffnen von Dateien über openFile(). Die Klasse ersetzt die verstreuten file_*- und stat()-Funktionen durch ein kohärentes, erweiterbares API.
Weil SplFileInfo keine Datei öffnet, sondern nur Metadaten liefert, ist das Erzeugen einer Instanz sehr leichtgewichtig. Erst der Aufruf von openFile() legt einen echten Datei-Handle an und gibt ein SplFileObject zurück, mit dem der Inhalt gelesen oder geschrieben werden kann.
- Erbt von: keine (Basisklasse)
- Bekannte Unterklassen:
SplFileObject,DirectoryIterator,RecursiveDirectoryIterator
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei oder zum Verzeichnis, über die Informationen abgerufen werden sollen. Kann absolut oder relativ sein. |
Rückgabewert
Beispiele
Grundlegende Dateiinformationen abrufen
<?php
$info = new SplFileInfo('/var/www/html/index.php');
echo 'Dateiname: ' . $info->getFilename() . PHP_EOL;
echo 'Erweiterung: ' . $info->getExtension() . PHP_EOL;
echo 'Größe (Byte): ' . $info->getSize() . PHP_EOL;
echo 'Letzter Änderungszeitstempel: ' . date('Y-m-d H:i:s', $info->getMTime()) . PHP_EOL;
echo 'Ist Datei: ' . ($info->isFile() ? 'ja' : 'nein') . PHP_EOL;
echo 'Ist Verz.: ' . ($info->isDir() ? 'ja' : 'nein') . PHP_EOL;
echo 'Ist lesbar: ' . ($info->isReadable() ? 'ja' : 'nein') . PHP_EOL;
Dateien in einem Verzeichnis filtern und Inhalt lesen
<?php
$dir = new RecursiveDirectoryIterator('/var/www/html', FilesystemIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($dir);
foreach ($iterator as $fileInfo) {
/** @var SplFileInfo $fileInfo */
if ($fileInfo->isFile() && $fileInfo->getExtension() === 'php') {
echo $fileInfo->getRealPath() . ' (' . $fileInfo->getSize() . ' Byte)' . PHP_EOL;
// Datei zum Lesen öffnen
$file = $fileInfo->openFile('r');
$firstLine = $file->fgets();
echo ' Erste Zeile: ' . trim($firstLine) . PHP_EOL;
}
}
Berechtigungen und Eigentümer einer Datei prüfen
<?php
$info = new SplFileInfo('/etc/hosts');
// Oktaldarstellung der Berechtigungen
$perms = substr(sprintf('%o', $info->getPerms()), -4);
echo 'Berechtigungen: ' . $perms . PHP_EOL;
echo 'Eigentümer-UID: ' . $info->getOwner() . PHP_EOL;
echo 'Gruppen-GID: ' . $info->getGroup() . PHP_EOL;
echo 'iNode: ' . $info->getInode() . PHP_EOL;
// Wichtig · Fallstricke
Symlinks: Methoden wie getSize() und getMTime() folgen symbolischen Links und liefern Informationen über das Ziel. Soll der Link selbst untersucht werden, sind die lstat()-basierten Methoden (z. B. getLinkTarget()) zu verwenden.
Pfadauflösung: getRealPath() gibt false zurück, wenn die Datei nicht existiert. Vor dem Zugriff auf Dateiinhalte sollte daher stets isFile() oder isReadable() geprüft werden, um unerwartete Fehler zu vermeiden.
Sicherheit: Bei der Verarbeitung von Benutzereingaben als Dateipfad besteht die Gefahr von Path-Traversal-Angriffen (../). Den Pfad stets mit getRealPath() kanonisieren und gegen ein erlaubtes Basisverzeichnis prüfen.
Caching: PHP cached Ergebnisse von stat()-Aufrufen intern. Nach Dateioperationen ggf. clearstatcache() aufrufen, damit SplFileInfo aktuelle Werte liefert.