Dateiendung in PHP ermitteln: Vom Anfänger zum Profi im Jahr 2025
\n\nHast du dich schon einmal gefragt, wie oft ein PHP-Entwickler täglich die Dateiendung extrahieren muss? Dutzende, wenn nicht hunderte Male. Beim Hochladen von Profilbildern, der Verarbeitung von Dokumenten oder der Validierung von Bildern – überall musst du wissen, was für ein Dateityp bei dir ankommt: .jpg, .pdf oder ein hinterhältiges .php.jpg.
Die Frage "How can I get a file's extension in PHP?" ist eine der beliebtesten auf Stack Overflow. Und das aus gutem Grund. Was könnte einfacher sein? Aber der Teufel steckt, wie immer, im Detail. Im Jahr 2025 haben wir nicht nur die bewährten pathinfo() und explode(), sondern auch neue Möglichkeiten in PHP 8.4, die den Code sauberer und sicherer machen.
Lass uns 5 praktische Methoden, ihre Vor- und Nachteile sowie die ideale Einsatzmöglichkeit durchgehen. Los geht's!
\n\n1. Der Klassiker: pathinfo() – der König aller Methoden
\n\nDie beliebteste und korrekteste Methode ist die Funktion pathinfo(). Sie existiert seit PHP 4 und ist bis heute aktuell. Warum? Weil sie intelligent ist: Sie berücksichtigt systembedingte Pfadtrennzeichen, funktioniert mit URLs und scheitert nicht an Punkten im Dateinamen.
<?php\n$file = 'document.report.pdf';\n$extension = pathinfo($file, PATHINFO_EXTENSION);\n// Ergebnis: 'pdf'\n?>\n\nEs gibt jedoch eine Besonderheit. Wenn die Datei keine Endung hat, gibt pathinfo() einen leeren String zurück. Nicht null, nicht false – sondern einen leeren String. Das ist wichtig für strikte Prüfungen.
<?php\n$file = 'README';\n$ext = pathinfo($file, PATHINFO_EXTENSION);\nvar_dump($ext); // string(0) ""\n?>\n\nWann verwenden: Immer, wenn du schnell und zuverlässig die Dateiendung benötigst. Das ist der Industriestandard.
\n\n2. Die altbewährte Methode: explode() und strrpos()
\n\nEinige erfahrene Entwickzer bevorzugen die manuelle String-Analyse. Die Idee ist einfach: Finde den letzten Punkt und nimm alles, was danach kommt.
\n\n<?php\n$file = 'image.jpg';\n$parts = explode('.', $file);\n$extension = end($parts);\n// Ergebnis: 'jpg'\n?>\n\nDas funktioniert im Prinzip. Aber es gibt einen Haken: explode() erzeugt ein Array, und end() verschiebt den internen Array-Zeiger. Nicht kritisch, aber nicht elegant.
Eine performantere Variante ist strrpos() + substr():
<?php\n$file = 'archive.tar.gz';\n$pos = strrpos($file, '.');\n$extension = $pos !== false ? substr($file, $pos + 1) : '';\n// Ergebnis: 'gz'\n?>\n\nBeachte: strrpos() sucht nach dem letzten Vorkommen des Punktes. Das ist korrekt – wir wollen gz, nicht tar.gz.
Wann verwenden: Wenn pathinfo() nicht verfügbar ist (exotische Fälle) oder du mehr Kontrolle über die Logik benötigst.
3. Die Neuerung von 2025: str_contains() und str_starts_with()
\n\nIn PHP 8.0 wurden str_contains() und str_starts_with() eingeführt, und in PHP 8.4 gibt es eine verbesserte Unterstützung für Multibyte-Zeichenketten. Das eröffnet neue, elegante Möglichkeiten.
<?php\n$file = 'photo.2025.jpg';\n\nif (str_contains($file, '.')) {\n $extension = substr($file, strrpos($file, '.') + 1);\n} else {\n $extension = '';\n}\n// Ergebnis: 'jpg'\n?>\n\nSieht das schön aus? Nicht wirklich. Aber wenn du prüfen möchtest, ob eine Datei ein Bild ist, ist str_ends_with() dein Freund:
<?php\n$file = 'avatar.png';\n$isImage = str_ends_with($file, '.png') || str_ends_with($file, '.jpg');\n// true\n?>\n\nWann verwenden: Für schnelle Prüfungen auf bestimmte Endungen, ohne die gesamte Endung extrahieren zu müssen.
\n\n4. Reguläre Ausdrücke: Wenn du alles auf einmal brauchst
\n\nManchmal reicht eine einzelne Endung nicht aus. Du musst zum Beispiel prüfen, ob eine Datei ein sicheres Bild ist, und gleichzeitig den Namen ohne Endung extrahieren. Hier kom