pathinfo()
Die Funktion pathinfo() ist eine eingebaute PHP-Funktion, die Informationen über einen Dateipfad zurückgibt – als assoziatives Array mit Verzeichnis, Dateiname und Erweiterung.
Was ist die pathinfo()-Funktion?
Die Funktion pathinfo() ist eine eingebaute PHP-Funktion, die einen Dateipfad in seine Bestandteile aufteilt — das Verzeichnis, den Dateinamen und die Erweiterung — und diese als assoziatives Array zurückgibt. Sie ist die erste Wahl, wenn man Fragen beantworten möchte wie „In welchem Ordner befindet sich diese Datei?" oder „Welche Erweiterung hat eine hochgeladene Datei?", ohne selbst eine String-Analyse schreiben zu müssen.
Ein wichtiger Punkt vorab: pathinfo() arbeitet ausschließlich mit dem übergebenen String. Es wird niemals auf das Dateisystem zugegriffen, der Pfad muss also nicht auf eine tatsächlich existierende Datei zeigen. Das macht die Funktion schnell und sicher bei der Verwendung mit benutzergelieferten Werten (zum Beispiel dem ursprünglichen Namen einer hochgeladenen Datei).
Diese Seite behandelt die Syntax, das von pathinfo() zurückgegebene Array, wie man eine einzelne Komponente abfragt und die Sonderfälle, die leicht zu Verwirrung führen (keine Erweiterung, Dotfiles, mehrteilige Erweiterungen).
Syntax
pathinfo(string $path, int $flags = PATHINFO_ALL): array|string$path— der zu untersuchende Dateipfad. Er kann absolut oder relativ sein und muss nicht existieren.$flags— optional. Wird dieser Parameter weggelassen (oder aufPATHINFO_ALLgesetzt), gibt die Funktion ein assoziatives Array zurück. Bei Angabe eines einzelnen Flags wird nur diese Komponente als String zurückgegeben.
Das von pathinfo() zurückgegebene Array
Standardmäßig gibt pathinfo() ein assoziatives Array mit bis zu vier Schlüsseln zurück:
| Schlüssel | Bedeutung | Beispiel für /var/www/html/index.php |
|---|---|---|
dirname | Der Verzeichnisteil | /var/www/html |
basename | Der vollständige Dateiname mit Erweiterung | index.php |
extension | Die Erweiterung (ohne Punkt) | php |
filename | Der Dateiname ohne Erweiterung | index |
Hier wird der Dateipfad übergeben und das resultierende Array in $info gespeichert. Anschließend wird jede Komponente über ihren Schlüssel ausgelesen.
Wichtig: Der Schlüssel
extensionexistiert nur, wenn der Pfad tatsächlich einen.enthält. Hat der Pfad keine Erweiterung, fehlt dieser Schlüssel einfach im Array. Ein direkter Zugriff auf$info['extension']würde dann eine Warnung „Undefined array key" auslösen. Im Zweifelsfall besser$info['extension'] ?? ''verwenden.
Eine einzelne Komponente zurückgeben
Wird nur ein Teil benötigt, übergibt man ein Flag als zweites Argument. Die möglichen Flags sind PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION und PATHINFO_FILENAME. Mit einem einzelnen Flag gibt die Funktion einen String statt eines Arrays zurück:
Dies ist der sauberste Weg, um nur die Erweiterung abzurufen — zum Beispiel um zu prüfen, ob ein Upload einem erlaubten Dateityp entspricht.
Sonderfälle, die beachtet werden sollten
pathinfo() ist fehlertolerant, aber einige Ergebnisse überraschen:
<?php
// 1. No extension: the 'extension' key is missing entirely.
print_r(pathinfo('/etc/hosts'));
// Array ( [dirname] => /etc [basename] => hosts [filename] => hosts )
// 2. Multi-part extension: only the LAST part counts as the extension.
print_r(pathinfo('archive.tar.gz'));
// Array ( [dirname] => . [basename] => archive.tar.gz
// [extension] => gz [filename] => archive.tar )
// 3. Dotfile: the leading dot makes the whole name the "extension".
print_r(pathinfo('/home/user/.bashrc'));
// Array ( [dirname] => /home/user [basename] => .bashrc
// [extension] => bashrc [filename] => )Hinweise:
- Ein Pfad ohne Verzeichnis (Fall 2) gibt bei
dirnameden Wert.(aktuelles Verzeichnis) zurück. - Bei
.tar.gz-Dateinamen behandeltpathinfo()nurgzals Erweiterung — es gibt keine eingebaute Möglichkeit,tar.gzin einem einzigen Aufruf zu erhalten. - Eine Dotfile wie
.bashrcwird als „eine Datei ohne Namen mit der Erweiterungbashrc" interpretiert, was selten dem gewünschten Verhalten entspricht. Solche Fälle müssen im eigenen Code separat behandelt werden.
Wann pathinfo() verwendet werden sollte
pathinfo() ist sinnvoll, wenn mehr als ein Teil eines Pfades benötigt wird oder wenn ein lesbares, benanntes Array einer Reihe einzelner Funktionsaufrufe vorgezogen wird:
pathinfo($p)verwenden, um Verzeichnis, Name und Erweiterung auf einmal zu erhalten.- basename() verwenden, wenn nur der Dateiname benötigt wird — die Funktion erlaubt auch das Abschneiden eines bekannten Suffixes.
- dirname() verwenden, wenn nur das Verzeichnis benötigt wird; das
$levels-Argument ermöglicht das Navigieren über mehrere Ebenen. - realpath() verwenden, wenn ein Pfad gegen das tatsächliche Dateisystem aufgelöst werden muss (Symlinks,
..usw.) — anders alspathinfo()greift diese Funktion tatsächlich auf die Festplatte zu und gibtfalsezurück, wenn die Datei nicht existiert.
Einen umfassenderen Überblick über das Lesen und Schreiben von Dateien bietet PHP File Handling.
Fazit
pathinfo() ist der schnellste Weg, einen Dateipfad in Verzeichnis, Basisname, Erweiterung und reinen Dateinamen aufzuteilen. Dabei sollte man sich merken: Die Funktion parst nur den String (sie prüft nicht, ob die Datei existiert), der Schlüssel extension fehlt, wenn keine Erweiterung vorhanden ist, und bei Namen wie archive.tar.gz wird nur die letzte Erweiterung zurückgegeben. Für den Zugriff auf einzelne Komponenten sind die dedizierten Funktionen basename() und dirname() oft die übersichtlichere Wahl.