Wie man die Dateierweiterung in PHP erhält: Best Practices für 2025
\n\nHaben Sie schon einmal die Situation erlebt, dass Sie schnell bestimmen müssen, welche Datei ein Benutzer hochlädt – ein Bild, ein Dokument oder ein Archiv? Oder vielleicht schreiben Sie einen Datei-Parser und müssen dynamisch Hunderte von Erweiterungen verarbeiten? Die Frage "How can I get a file's extension in PHP?" gehört seit vielen Jahren zu den beliebtesten auf Stack Overflow und erzielt Hunderttausende von Aufrufen. Und das ist kein Zufall.
\n\nMan könnte meinen, was gibt es Einfacheres? Man nimmt die Zeichenkette, findet den Punkt, schneidet das Ende ab. Aber PHP ist eine Sprache mit Charakter. Sie bietet gleich mehrere eingebaute Funktionen, und die richtige Wahl hängt vom Kontext ab. Im Jahr 2025, wo Sicherheit und Leistung wichtiger denn je sind, werden wir alle aktuellen Methoden analysieren und die beste ermitteln.
\n\nIn diesem Artikel erfahren Sie:
\n- \n
- Fünf funktionierende Methoden, um die Dateierweiterung in PHP zu erhalten. \n
- Welche Methode in 95% der Fälle verwendet werden sollte. \n
- Wie Sie nicht in die Falle mit Dateien ohne Erweiterung oder mit mehreren Punkten tappen. \n
- Reale Codebeispiele zum Kopieren. \n
Methode 1: Der Klassiker — pathinfo()
\n\nWenn Sie einen erfahrenen PHP-Entwickler fragen, wie man die Dateierweiterung erhält, wird er ohne Zögern antworten: pathinfo(). Dies ist die beliebteste und empfohlene Methode. Die Funktion gibt ein Array mit Informationen zum Pfad zurück: Verzeichnis, Dateiname, Erweiterung und vollständiger Name.
<?php\n$file = 'document.pdf';\n$extension = pathinfo($file, PATHINFO_EXTENSION);\necho $extension; // Gibt aus: pdf\n?>\n\n\nDie Schönheit dieser Methode liegt in ihrer Einfachheit und Lesbarkeit. Sie übergeben den Dateinamen und die Konstante PATHINFO_EXTENSION – und erhalten ein sauberes Ergebnis ohne überflüssige Zeichen. pathinfo() verarbeitet die meisten Standardfälle korrekt, einschließlich Dateien mit mehreren Punkten, wie z.B. archive.tar.gz – in diesem Fall gibt es gz zurück, was logisch ist, da dies die endgültige Erweiterung ist.
Vorteile: intuitiv verständlich, eingebaute Funktion, funktioniert mit Pfaden jeder Komplexität.
\nNachteile: kann einen leeren String zurückgeben, wenn die Datei keine Erweiterung hat.
\n\nMethode 2: Arbeiten mit Zeichenketten — strrchr() + substr()
\n\nManchmal findet man in Legacy-Code oder in Lehrbeispielen manuelles Parsen. Die Idee ist einfach: Finde den letzten Punkt in der Zeichenkette und nimm alles, was danach kommt.
\n\n<?php\n$file = 'image.jpg';\n$extension = substr(strrchr($file, '.'), 1);\necho $extension; // Gibt aus: jpg\n?>\n\n\nDie Funktion strrchr() findet das letzte Vorkommen eines Zeichens und gibt alles ab diesem zurück (einschließlich des Punktes). substr() mit dem Parameter 1 schneidet den Punkt ab. Funktioniert zuverlässig, aber der Code ist weniger lesbar.
Interessante Tatsache: Diese Methode ist ein direkter Nachkomme der Ära der C-ähnlichen Funktionen. Sie ist in Mikro-Benchmarks schneller als pathinfo(), aber in realen Projekten ist der Unterschied vernachlässigbar. Verwenden Sie sie, wenn Sie einen hochbelasteten Parser schreiben und jede Mikrosekunde zählt.
Methode 3: Schnell und schmutzig — explode()
\n\nDie naivste Methode, die Anfängern in den Sinn kommt: Die Zeichenkette am Punkt aufteilen und das letzte Element des Arrays nehmen.
\n\n<?php\n$file = 'report.xlsx';\n$parts = explode('.', $file);\n$extension = end($parts);\necho $extension; // Gibt aus: xlsx\n?>\n\n\nAchtung: Dies ist eine schlechte Praxis. Warum? Stellen Sie sich eine Datei my.file.name.txt vor. explode() teilt sie in 4 Teile, und end() gibt txt zurück. Das scheint richtig. Aber was, wenn die Datei .htaccess heißt? Das Array wäre ['', 'htaccess'], und die Erweiterung würde als htaccess zurückgegeben, obwohl dies der vollständige Dateiname ist. Oder bei einer Datei ohne Erweiterung – der Name selbst würde zurückgegeben.
Diese Methode ist