Diese Frage können Sie überall im Internet mit verschiedenen Antworten lesen:
$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];
usw.
Es gibt jedoch immer "den besten Weg" und es sollte sich um einen Stapelüberlauf handeln.
php
file-extension
e-satis
quelle
quelle
strrchr($filename, '.');
Antworten:
Leute aus anderen Skriptsprachen denken immer, dass ihre besser ist, weil sie eine eingebaute Funktion haben, um das zu tun, und nicht PHP (ich schaue mir gerade Pythonistas an :-)).
Tatsächlich existiert es, aber nur wenige Menschen wissen es. Treffen
pathinfo()
:Dies ist schnell und eingebaut.
pathinfo()
kann Ihnen andere Informationen geben, wie z. B. den kanonischen Pfad, abhängig von der Konstante, die Sie an ihn übergeben.Denken Sie daran, dass Sie zuerst das Gebietsschema festlegen müssen, wenn Sie mit Nicht-ASCII-Zeichen umgehen möchten. Z.B:
Beachten Sie auch, dass dies nicht den Dateiinhalt oder den MIME-Typ berücksichtigt, sondern nur die Erweiterung. Aber es ist das, wonach du gefragt hast.
Beachten Sie schließlich, dass dies nur für einen Dateipfad funktioniert, nicht für einen URL-Ressourcenpfad, der mit PARSE_URL abgedeckt wird.
Genießen
quelle
function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); }
Sie sicher, dass die Datei eine Erweiterung hat. Sie kann alles tun, wenn Sie einen Pfad als Argument übergeben!pathinfo()
quelle
echo pathinfo('/foo/bar/baz.bill')['extension'];
Beispiel-URL:
http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
A) Verwenden Sie keine empfohlenen unsicheren
PATHINFO
:B) Verwenden Sie PARSE_URL :
BONUS: Alle nativen PHP-Beispiele anzeigen
quelle
foo_folder/foo-file.jpg?1345838509
wird kläglich mit justpathinfo
, thanxparse_url
ist für URL undpathinfo
ist für Dateipfad.Es gibt auch
SplFileInfo
:Oft können Sie besseren Code schreiben, wenn Sie ein solches Objekt anstelle einer Zeichenfolge weitergeben. Ihr Code spricht dann mehr. Seit PHP 5.4 ist dies ein Einzeiler:
quelle
->getExtension()
SplFileInfo seit PHP 5.3.6 verfügbar ist.Die Antwort von E-satis ist der richtige Weg, um die Dateierweiterung zu bestimmen.
Anstatt sich auf eine Dateierweiterung zu verlassen, können Sie alternativ die Dateieinfo verwenden , um den MIME-Typ der Dateien zu bestimmen.
Hier ist ein vereinfachtes Beispiel für die Verarbeitung eines von einem Benutzer hochgeladenen Bildes:
quelle
Solange es keinen Pfad enthält, können Sie auch Folgendes verwenden:
Wo
$fname
ist ein Name der Datei, zum Beispiel :my_picture.jpg
. Und das Ergebnis wäre:jpg
quelle
1) Wenn Sie (PHP 5> = 5.3.6) verwenden , können Sie SplFileInfo :: getExtension verwenden - Ruft die Dateierweiterung ab
Beispielcode
Dies wird ausgegeben
2) Eine andere Möglichkeit, die Erweiterung zu erhalten, wenn Sie (PHP 4> = 4.0.3, PHP 5) verwenden, ist pathinfo
Beispielcode
Dies wird ausgegeben
// BEARBEITEN: Eine Klammer wurde entfernt
quelle
Manchmal ist es nützlich, nicht zu verwenden
pathinfo($path, PATHINFO_EXTENSION)
. Zum Beispiel:Beachten Sie auch, dass
pathinfo
einige Nicht-ASCII-Zeichen nicht verarbeitet werden können (normalerweise werden sie nur aus der Ausgabe unterdrückt). In Erweiterungen ist das normalerweise kein Problem, aber es tut nicht weh, sich dieser Einschränkung bewusst zu sein.quelle
test.19-02-2014.jpeg
ltrim(strrchr($PATH, '.'),'.')
fehl, wenn /root/my.folder/my.css wie pathinfo funktioniert, ohne jedoch alles zu tokenisieren.Der einfachste Weg, um eine Dateierweiterung in PHP zu erhalten, ist die Verwendung der in PHP integrierten Funktion pathinfo .
quelle
Sie können auch dies versuchen (es funktioniert unter PHP 5. * und 7):
Tipp: Es wird eine leere Zeichenfolge zurückgegeben, wenn die Datei keine Erweiterung hat
quelle
Entschuldigung ... "Kurze Frage; aber NICHT kurze Antwort"
Beispiel 1 für PATH
Beispiel 2 für URL
Ausgabe von Beispiel 1:
Ausgabe von Beispiel 2:
Verweise
https://www.php.net/manual/en/function.pathinfo.php
https://www.php.net/manual/en/function.realpath.php
https://www.php.net/manual/en/function.parse-url.php
quelle
Eine schnelle Lösung wäre so etwas.
quelle
$file_ext = end(explode('.', $filename));
alles in dieser Antwort in einer einzigen Zeile anstelle von vier tun..tar.gz
. Es wird nicht funktionieren. Wenn Sie also voll mit Erweiterungen sein müssen, verwenden Sie dieseltrim(strstr($filename, '.'), '.');
, um stattdessen voller Korrektur zu werdengz
.Hier ist ein Beispiel. Angenommen, $ filename ist "example.txt".
$ Ext wird also ".txt" sein.
quelle
pathinfo ist ein Array. Wir können Verzeichnisnamen, Dateinamen, Erweiterung usw.: Überprüfen .
quelle
quelle
Sie können auch Folgendes versuchen:
quelle
quelle
Das wird funktionieren
quelle
Ich habe festgestellt, dass die
pathinfo()
undSplFileInfo
-Lösungen für Standarddateien im lokalen Dateisystem gut funktionieren, aber Sie können auf Schwierigkeiten stoßen, wenn Sie mit Remote-Dateien arbeiten, da URLs für gültige Bilder möglicherweise eine#
(Fragment-ID) und / oder?
(Abfrageparameter) haben. am Ende der URL, die beide Lösungen (falsch) als Teil der Dateierweiterung behandeln.Ich fand, dass dies ein zuverlässiger Weg war
pathinfo()
eine URL nach dem ersten Parsen zu verwenden, um die unnötige Unordnung nach der Dateierweiterung zu beseitigen:quelle
Verwenden
substr($path, strrpos($path,'.')+1);
. Es ist die schnellste Methode aller Vergleiche.@ Kurt Zhong hat bereits geantwortet.
Überprüfen wir das Vergleichsergebnis hier: https://eval.in/661574
quelle
Sie können alle Dateierweiterungen in einem bestimmten Ordner abrufen und Vorgänge mit einer bestimmten Dateierweiterung ausführen:
quelle
Mach es schneller.
Low-Level-Anrufe müssen sehr schnell sein, daher dachte ich, dass es einige Nachforschungen wert ist. Ich habe einige Methoden ausprobiert (mit verschiedenen Stringlängen, Erweiterungslängen, jeweils mehreren Läufen). Hier sind einige vernünftige:
Die Ergebnisse waren nicht sehr überraschend. Schlecht
pathinfo
ist (bei weitem!)method3()
Am langsamsten (es sieht so aus, als würde er versuchen, das Ganze zu analysieren und dann alle unnötigen Teile fallen zu lassen) - und (strrpos) ist bei weitem am schnellsten:HINWEIS: Die erste Methode hat einen Nebeneffekt: Sie gibt den gesamten Namen zurück, wenn keine Erweiterung vorhanden ist. Sicherlich würde es keinen Sinn machen, es mit einem zusätzlichen Strpos zu messen, um dieses Verhalten zu vermeiden.
Fazit
Das sieht aus wie der Weg der Samurai:
quelle
Wenn Sie nach Geschwindigkeit suchen (z. B. in einem Router), möchten Sie wahrscheinlich nicht alles tokenisieren. Viele andere Antworten werden mit scheitern
/root/my.folder/my.css
quelle
Obwohl der "beste Weg" umstritten ist, glaube ich, dass dies aus mehreren Gründen der beste Weg ist:
tar.gz
quelle
IMO, dies ist der beste Weg, wenn Sie Dateinamen wie name.name.name.ext haben (hässlich, aber es passiert manchmal):
quelle
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);
preg_replace Ansatz verwenden wir das Suchen und Ersetzen von regulären Ausdrücken. In der Funktion preg_replace ist der erste Parameter ein Muster für die Suche, der zweite Parameter $ 1 ist eine Referenz auf alles, was mit dem ersten (. *) Übereinstimmt, und der dritte Parameter ist der Dateiname.
Auf andere Weise können wir auch strrpos verwenden, um die Position des letzten Auftretens eines '.' in einem Dateinamen und erhöhen Sie diese Position um 1, so dass die Zeichenfolge von (.) explodiert.
$ext = substr($fileName, strrpos($fileName, '.') + 1);
quelle
Eigentlich habe ich danach gesucht.
quelle
Verwenden
für einen schnellen Abruf von Erweiterungen (wenn Sie sicher sind, dass Ihr Dateiname einen hat).
quelle