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 auf Stapelüberlauf sein.
Leute aus anderen Skriptsprachen denken immer, dass ihre besser sind, weil sie eine eingebaute Funktion dafür haben und nicht PHP (ich sehe gerade Pythonistas :-)).
Tatsächlich existiert es, aber nur wenige Menschen wissen es. Treffen Sie pathinfo()
:
$ext = pathinfo($filename, PATHINFO_EXTENSION);
Das ist schnell und eingebaut. pathinfo()
kann Ihnen je nach der Konstante, die Sie an sie übergeben, andere Informationen wie z. B. den kanonischen Pfad geben.
Denken Sie daran, dass Sie zuerst das Gebietsschema festlegen müssen, wenn Sie in der Lage sein möchten, mit Nicht-ASCII -Zeichen umzugehen. Z.B:
setlocale(LC_ALL,'en_US.UTF-8');
Beachten Sie außerdem, dass dies den Dateiinhalt oder den MIME-Typ nicht berücksichtigt. Sie erhalten nur die Erweiterung. Aber darum haben Sie gebeten.
Beachten Sie zum Schluss, dass dies nur für einen Dateipfad funktioniert, nicht für einen URL-Ressourcenpfad, der mit PARSE_URL abgedeckt wird.
Genießen
$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
Beispiel-URL: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
PATHINFO
:_$x = pathinfo($url);
$x['dirname'] ???? 'http://example.com/myfolder'
$x['basename'] ???? 'sympony.mp3?a=1&b=2#XYZ' // <------- BAD !!
$x['extension'] ???? 'mp3?a=1&b=2#XYZ' // <------- BAD !!
$x['filename'] ???? 'sympony'
_
_$x = parse_url($url);
$x['scheme'] ???? 'http'
$x['Host'] ???? 'example.com'
$x['path'] ???? '/myfolder/sympony.mp3'
$x['query'] ???? 'aa=1&bb=2'
$x['fragment']???? 'XYZ'
_
Hinweis: Hashtags sind nur dann serverseitig verfügbar, wenn sie manuell hinzugefügt wurden.
Es gibt auch SplFileInfo
:
$file = new SplFileInfo($path);
$ext = $file->getExtension();
Oft können Sie besseren Code schreiben, wenn Sie ein solches Objekt anstelle einer Zeichenfolge übergeben. Ihr Code spricht dann mehr. Seit PHP 5.4 ist dies ein Einzeiler:
$ext = (new SplFileInfo($path))->getExtension();
Die Antwort von E-satis ist der richtige Weg, um die Dateierweiterung zu bestimmen.
Anstatt sich auf eine Dateierweiterung zu verlassen, können Sie auch fileinfo verwenden, um den MIME-Dateityp zu bestimmen.
Hier ist ein vereinfachtes Beispiel für die Verarbeitung eines von einem Benutzer hochgeladenen Bildes:
// Code assumes necessary extensions are installed and a successful file upload has already occurred
// Create a FileInfo object
$finfo = new FileInfo(null, '/path/to/magic/file');
// Determine the MIME type of the uploaded file
switch ($finfo->file($_FILES['image']['tmp_name'], FILEINFO_MIME)) {
case 'image/jpg':
$im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
break;
case 'image/png':
$im = imagecreatefrompng($_FILES['image']['tmp_name']);
break;
case 'image/gif':
$im = imagecreatefromgif($_FILES['image']['tmp_name']);
break;
}
1) Wenn Sie verwenden (PHP 5> = 5.3.6) können Sie verwenden SplFileInfo :: getExtension - Ermittelt die Dateierweiterung
Beispielcode
<?php
$info = new SplFileInfo('test.png');
var_dump($info->getExtension());
$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());
?>
Dies wird ausgegeben
string(3) "png"
string(2) "gz"
2) Eine andere Möglichkeit, die Erweiterung zu erhalten, wenn Sie verwenden (PHP 4> = 4.0.3, PHP 5) ist pathinfo
Beispielcode
<?php
$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);
$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);
?>
Dies wird ausgegeben
string(3) "png"
string(2) "gz"
// EDIT: entfernte eine Klammer
Solange es keinen Pfad enthält, können Sie auch Folgendes verwenden:
array_pop(explode('.', $fname))
Wobei $fname
ein Name der Datei ist, zum Beispiel: my_picture.jpg
. Und das Ergebnis wäre: jpg
Manchmal ist es sinnvoll, pathinfo($path, PATHINFO_EXTENSION)
nicht zu verwenden. Zum Beispiel:
$path = '/path/to/file.tar.gz';
echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz
Beachten Sie auch, dass pathinfo
einige Nicht-ASCII-Zeichen nicht verarbeiten kann (normalerweise werden sie nur aus der Ausgabe entfernt). Bei Erweiterungen ist das normalerweise kein Problem, aber es tut nicht weh, sich dieser Einschränkung bewusst zu sein.
Sie können auch dies versuchen (es funktioniert auf PHP 5. * und 7):
$info = new SplFileInfo('test.Zip');
echo $info->getExtension(); // ----- Output -----> Zip
Tipp: Es wird eine leere Zeichenfolge zurückgegeben, wenn die Datei keine Erweiterung hat
Der einfachste Weg, eine Dateierweiterung in PHP zu erhalten, ist die Verwendung der eingebauten PHP-Funktion pathinfo .
$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // The output should be the extension of the file e.g., png, gif, or html
Eine schnelle Lösung wäre so etwas.
// Exploding the file based on the . operator
$file_ext = explode('.', $filename);
// Count taken (if more than one . exist; files like abc.fff.2013.pdf
$file_ext_count = count($file_ext);
// Minus 1 to make the offset correct
$cnt = $file_ext_count - 1;
// The variable will have a value pdf as per the sample file name mentioned above.
$file_extension = $file_ext[$cnt];
substr($path, strrpos($path, '.') + 1);
pathinfo ist ein Array. Wir können den Verzeichnisnamen , den Dateinamen, die Erweiterung usw. überprüfen:
$path_parts = pathinfo('test.png');
echo $path_parts['extension'], "\n";
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['filename'], "\n";
Hier ist ein Beispiel. Angenommen, $ filename ist "example.txt",
$ext = substr($filename, strrpos($filename, '.', -1), strlen($filename));
Also wird $ ext ".txt" sein.
Das wird funktionieren
$ext = pathinfo($filename, PATHINFO_EXTENSION);
Ich habe festgestellt, dass die Lösungen pathinfo()
und SplFileInfo
für Standarddateien im lokalen Dateisystem gut funktionieren, aber Sie können auf Schwierigkeiten stoßen, wenn Sie mit Remotedateien arbeiten, da URLs für gültige Bilder möglicherweise einen #
haben. (Fragment-IDs) und/oder ?
(Abfrageparameter) am Ende der URL, die beide Lösungen (falsch) als Teil der Dateierweiterung behandeln.
Ich habe festgestellt, dass dies eine zuverlässige Methode ist, um pathinfo()
für eine URL zu verwenden, nachdem sie zuerst analysiert wurde, um das unnötige Durcheinander nach der Dateierweiterung zu beseitigen:
$url_components = parse_url($url); // First parse the URL
$url_path = $url_components['path']; // Then get the path component
$ext = pathinfo($url_path, PATHINFO_EXTENSION); // Then use pathinfo()
Verwenden Sie substr($path, strrpos($path,'.')+1);
. Es ist die schnellste Methode aller Vergleiche.
@ Kurt Zhong bereits beantwortet.
Lassen Sie uns das Vergleichsergebnis hier überprüfen: https://eval.in/661574
Sie können auch Folgendes versuchen:
pathinfo(basename($_FILES["fileToUpload"]["name"]), PATHINFO_EXTENSION)
Obwohl der "beste Weg" umstritten ist, glaube ich, dass dies aus mehreren Gründen der beste Weg ist:
function getExt($path)
{
$basename = basename($path);
return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
tar.gz
Sie können alle Dateierweiterungen in einem bestimmten Ordner abrufen und Vorgänge mit einer bestimmten Dateierweiterung ausführen:
<?php
$files = glob("abc/*.*"); // abc is the folder all files inside folder
//print_r($files);
//echo count($files);
for($i=0; $i<count($files); $i++):
$extension = pathinfo($files[$i], PATHINFO_EXTENSION);
$ext[] = $extension;
// Do operation for particular extension type
if($extension=='html'){
// Do operation
}
endfor;
print_r($ext);
?>
Wenn Sie nach Geschwindigkeit suchen (z. B. in einem Router), möchten Sie wahrscheinlich nicht alles mit einem Token versehen. Viele andere Antworten schlagen mit /root/my.folder/my.css
fehl
ltrim(strrchr($PATH, '.'),'.');
IMO, dies ist der beste Weg, wenn Sie Dateinamen wie name.name.name.ext haben (hässlich, aber es kommt manchmal vor):
$ext = explode('.', $filename); // Explode the string
$ext_len = count($ext) - 1; // Count the array -1 (because count() starts from 1)
$my_ext = $ext[$ext_len]; // Get the last entry of the array
echo $my_ext;
Eigentlich habe ich danach gesucht.
<?php
$url = 'http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ';
$tmp = @parse_url($url)['path'];
$ext = pathinfo($tmp, PATHINFO_EXTENSION);
var_dump($ext);
ltrim(strstr($file_url, '.'), '.')
dies ist der beste Weg, wenn Sie Dateinamen wie name.name.name.ext haben (hässlich, aber es kommt manchmal vor