W3docs

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 auf PATHINFO_ALL gesetzt), 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üsselBedeutungBeispiel für /var/www/html/index.php
dirnameDer Verzeichnisteil/var/www/html
basenameDer vollständige Dateiname mit Erweiterungindex.php
extensionDie Erweiterung (ohne Punkt)php
filenameDer Dateiname ohne Erweiterungindex
php— editable, runs on the server

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 extension existiert 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:

php— editable, runs on the server

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 dirname den Wert . (aktuelles Verzeichnis) zurück.
  • Bei .tar.gz-Dateinamen behandelt pathinfo() nur gz als Erweiterung — es gibt keine eingebaute Möglichkeit, tar.gz in einem einzigen Aufruf zu erhalten.
  • Eine Dotfile wie .bashrc wird als „eine Datei ohne Namen mit der Erweiterung bashrc" 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 als pathinfo() greift diese Funktion tatsächlich auf die Festplatte zu und gibt false zurü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.

Übungen

Übung
Was ist der Zweck der Funktion 'pathinfo()' in PHP?
Was ist der Zweck der Funktion 'pathinfo()' in PHP?
Was this page helpful?