Start · Sprachen · PHP · Referenz · SplFileInfo

SplFileInfo

Klasse

Bietet eine objektorientierte Schnittstelle zum Abrufen von Metainformationen über eine einzelne Datei oder ein Verzeichnis.

seit PHP 5.1.2 Kategorie: oop

Signatur

class SplFileInfo

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

Typ

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;
Dateiname: index.php Erweiterung: php Größe (Byte): 4096 Letzter Änderungszeitstempel: 2024-05-01 12:00:00 Ist Datei: ja Ist Verz.: nein Ist lesbar: ja

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;
    }
}
/var/www/html/index.php (4096 Byte) Erste Zeile: <?php

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;
Berechtigungen: 0644 Eigentümer-UID: 0 Gruppen-GID: 0 iNode: 123456

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