Frage

Dies ist eine Frage, die Sie überall im Web 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];

etc.

Allerdings gibt es immer „der beste Weg“, und es sollte auf Stack-Überlauf sein.

War es hilfreich?

Lösung

Die Menschen aus anderen Skriptsprachen immer denken, ihr besser ist, weil sie eine eingebaute Funktion zu tun, dass und nicht PHP (ich bin auf der Suche Pythonistas jetzt: -) haben.)

In der Tat gibt es sie, aber nur wenige Menschen wissen es. Treffen Sie pathinfo() :

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Das ist schnell und eingebaut. pathinfo() können Sie andere Informationen, wie kanonischer Pfad, abhängig von der Konstante, die Sie an es übergeben.

Denken Sie daran, dass, wenn Sie in der Lage sein wollen, mit nicht-ASCII-Zeichen zu behandeln, müssen Sie zuerst die Locale setzen. Z. B:

setlocale(LC_ALL,'en_US.UTF-8');

Beachten Sie auch, dies nicht in Betracht zieht den Dateiinhalt oder MIME-Typ, müssen Sie nur die Erweiterung bekommen. Aber es ist das, was Sie gefragt.

Schließlich ist zu beachten, dass dies nur für einen Dateipfad funktioniert, kein URL-Ressourcen Pfad, der parse_url abgedeckt werden.

Genießen

Andere Tipps

pathinfo()

$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

Für URLs, verwenden Sie keine 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'

Verwenden Sie parse_url statt:

$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 in serverseitige nicht verfügbar, nur wenn manuell hinzugefügt

.

Für alle nativen PHP Beispiele finden Sie unter: Get in PHP

Es gibt auch SplFileInfo :

$file = new SplFileInfo($path);
$ext  = $file->getExtension();

Oft können Sie besseren Code schreiben, wenn Sie ein solches Objekt übergeben um anstelle einer Zeichenfolge, Ihr Code mehr spricht dann. Seit PHP 5.4 ist dies ein Einzeiler:

$ext  = (new SplFileInfo($path))->getExtension();

E-satis Reaktion der richtige Weg ist, um die Dateierweiterung zu bestimmen.

Alternativ kann statt auf Dateien Erweiterung zu verlassen, können Sie die Dateiinfo nutzen könnten ( http: //us2.php. net / fileinfo ) die Dateien MIME-Typ zu bestimmen.

Hier ist ein vereinfachtes Beispiel ein Bild von einem Benutzer hochgeladen der Verarbeitung:

// 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 mit (PHP 5> = 5.3.6) Sie können SplFileInfo :: getExtension - Ruft die Dateierweiterung

Beispiel-Code

<?php

$info = new SplFileInfo('test.png');
var_dump($info->getExtension());

$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());

?>

Dies wird Ausgang

string(3) "png"
string(2) "gz"

2) Eine weitere Möglichkeit, die Erweiterung des Erhaltens, wenn Sie mit (PHP 4> = 4.0.3, PHP 5) ist pathinfo

Beispiel-Code

<?php

$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);

$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);

?>

Dies wird Ausgang

string(3) "png"
string(2) "gz"

// EDIT: entfernt, um eine Klammer

Solange es nicht Pfad enthält, die Sie auch verwenden können:

array_pop(explode('.',$fname))

Wo $fname ist ein Name der Datei, zum Beispiel: my_picture.jpg Und das Ergebnis wäre: jpg

Manchmal ist es sinnvoll, nicht pathinfo($path, PATHINFO_EXTENSION) 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 versagt einige Nicht-ASCII-Zeichen zu behandeln (in der Regel unterdrückt es nur um sie von der Ausgabe), in Erweiterungen, die in der Regel kein Problem, aber es tut nicht weh, von diesem Vorbehalt bewusst zu sein.

Die einfachste Möglichkeit, Dateierweiterung in PHP zu bekommen, ist PHP eingebaute Funktion zu benutzen pathinfo .

$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // the out should be extension of file eg:-png, gif, html
substr($path, strrpos($path, '.') + 1);

Eine schnelle Lösung wäre so etwas wie diese.

    //exploding the file based on . 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];

Hier ist ein Beispiel, suppose $ Dateiname ist "example.txt"

$ext = substr($filename,strrpos($filename,'.',-1),strlen($filename));  

So $ ext wird ".txt"

pathinfo ist Array. Wir können überprüfen, Verzeichnisname, Dateiname, Erweiterung etc

$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";  

Sie können auch versuchen, diese
(Arbeit auf PHP 5. * und 7)

$info = new SplFileInfo('test.zip');
echo $info->getExtension(); // ----- Output -----> zip

Tipp: es einen leeren String zurück, wenn die Datei keine Erweiterung hat
genießen Sie es;)

Dies funktioniert

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Ich fand, dass die pathinfo() und SplFileInfo Lösungen auch für Standard-Dateien auf dem lokalen Dateisystem funktionieren, aber Sie können in Schwierigkeiten geraten, wenn Sie mit Remote-Dateien als URLs für gültige Bilder arbeiten sind können einen # (Fragment Identifikatoren) und / oder ? (Abfrageparameter) am Ende der URL, die beide diese Lösungen (falsch) als Teil der Dateierweiterung behandeln.

Ich fand das eine zuverlässige Art und Weise war pathinfo() auf einer URL zu verwenden, nachdem es zuerst Parsen die unnötige Unordnung nach der Dateierweiterung Streifen aus:

$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()

Sie können auch versuchen, diese:

 pathinfo(basename( $_FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)

Warum nicht substr($path, strrpos($path,'.')+1); zu benutzen? Es ist die schnellste Methode aller vergleichen. @Kurt Zhong bereits beantwortet.

Lassen Sie uns das Vergleichsergebnis überprüfen hier: https://eval.in/661574

Sie können alle Dateierweiterung auf bestimmten Ordner erhalten und tun den Betrieb mit bestimmten Dateierweiterung

<?php
    $files=glob("abc/*.*");//abc is 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 perticular extenstion type
        if($extension=='html'){
            //do operation
        }
    endfor;
    print_r($ext);
?>

Wenn Sie für Geschwindigkeit (wie in einem Router) suchen, werden Sie wahrscheinlich nicht wollen, alles zerlegen. Viele andere Antworten werden mit /root/my.folder/my.css scheitern

ltrim(strrchr($PATH, '.'),'.');

Obwohl der „beste Weg“ fraglich ist, ich glaube, dass dies der beste Weg für ein paar Gründe ist:

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. Es arbeitet mit mehreren Teilen zu einer Erweiterung, zB tar.gz
  2. Kurz und effizienter Code
  3. Es funktioniert sowohl mit einem Dateinamen und einem vollständigen Pfad

Eigentlich suchte ich das.

<?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);

IMO Dies ist die beste Art und Weise, wenn Sie Dateinamen wie name.name.name.ext haben (hässlich, aber manchmal passiert)

$ext     = explode( '.', $filename ); //explode the string
$ext_len = count( $ext ) - 1; //count the array -1 (becouse count() starts from 1)
$my_ext  = $ext[ $ext_len ]; //get the last entry of the array

echo $my_ext;

Mit

str_replace('.', '', strrchr($file_name, '.'))

für eine schnelle Erweiterung Retrieval (wenn Sie wissen, für Sie sicher, dass Dateinamen haben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top