Question Comment obtenir (extraire) une extension de fichier en PHP?


C'est une question que vous pouvez lire partout sur le web avec différentes réponses:

$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.

Cependant, il y a toujours "le meilleur moyen" et il devrait être sur Stack Overflow.


611
2017-10-06 11:00


origine


Réponses:


Les gens d'autres langages de script pensent toujours que le leur est meilleur parce qu'ils ont une fonction intégrée pour le faire et pas PHP (je regarde pythonistas en ce moment :-)).

En fait, cela existe, mais peu de gens le savent. Rencontrer pathinfo():

$ext = pathinfo($filename, PATHINFO_EXTENSION);

C'est rapide et intégré. pathinfo() peut vous donner d'autres informations, telles que le chemin canonique, en fonction de la constante que vous lui passez.

Souvenez-vous que si vous voulez pouvoir traiter des caractères non ASCII, vous devez d'abord définir les paramètres régionaux. PAR EXEMPLE:

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

Notez également que cela ne prend pas en compte le contenu du fichier ou le type MIME, vous obtenez uniquement l'extension. Mais c'est ce que vous avez demandé.

Enfin, notez que cela ne fonctionne que pour un chemin de fichier, pas un chemin de ressources d'URL, qui sont couvertes en utilisant PARSE_URL.

Prendre plaisir


1554
2017-10-06 11:03



pathinfo()

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"

136
2017-10-06 11:02



utiliser plus sûr: PARSE_URL (au lieu de PATHINFO)


par exemple, l'URL est http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

PATHINFO résultats:

$x = pathinfo($url);
$x['dirname']   🡺 'http://example.com/myfolder'
$x['basename']  🡺 'sympony.mp3?a=1&b=2'         // <------- BAD !!
$x['extension'] 🡺 'mp3?a=1&b=2'                 // <------- BAD !!
$x['filename']  🡺 'sympony'


PARSE_URL résultats:

$x = parse_url($url);
$x['scheme']  🡺 'http'
$x['host']    🡺 'example.com'
$x['path']    🡺 '/myfolder/sympony.mp3'
$x['query']   🡺 'aa=1&bb=2'
$x['fragment']🡺 ''             //<----- this outputs hashtag "XYZ" only in case, when the link containing that hashtag was manually passed to function, because automatically, hashtags are not automatically detectable by PHP

dirname(parse_url($url)['path'])                      🡺 /myfolder
basename(parse_url($url))                             🡺 sympony.mp3
pathinfo(parse_url($url)['path'], PATHINFO_EXTENSION) 🡺 mp3

p.s. note, Hashtag une partie de l'URL (c.-à-d. #smth) non disponible dans la requête PHP, mais seulement avec javascript.


Pour des exemples utiles, voir: Obtenez l'URL complète en PHP


67
2017-07-17 12:39



Il y a aussi SplFileInfo:

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

Souvent, vous pouvez écrire un meilleur code si vous passez un tel objet à la place d'une chaîne, votre code parle plus alors. Depuis PHP 5.4 c'est un one-liner:

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

50
2017-10-17 10:32



La réponse E-satis est la bonne façon de déterminer l'extension du fichier.

Alternativement, au lieu de s'appuyer sur une extension de fichiers, vous pouvez utiliser le fichier info (http://us2.php.net/fileinfo) pour déterminer le type MIME des fichiers.

Voici un exemple simplifié de traitement d'une image téléchargée par un utilisateur:

// 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;
}

18
2017-10-06 14:23



1) Si vous utilisez (PHP 5> = 5.3.6) vous pouvez utiliser SplFileInfo :: getExtension - Obtient l'extension de fichier

Exemple de code

<?php

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

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

?>

Cela va sortir

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

2) Une autre façon d'obtenir l'extension si vous utilisez (PHP 4> = 4.0.3, PHP 5) est pathinfo

Exemple de code

<?php

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

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

?>

Cela va sortir

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

// EDIT: a supprimé un support


12
2017-08-02 07:52



Parfois, il est utile de ne pas utiliser pathinfo($path, PATHINFO_EXTENSION), par exemple:

$path = '/path/to/file.tar.gz';

echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz

Notez également que pathinfo ne parvient pas à gérer certains caractères non-ASCII (généralement, il les supprime simplement de la sortie), dans des extensions qui ne posent généralement pas de problème mais qui ne font pas de mal d'être conscients de cette mise en garde.


9
2017-11-01 18:11



Tant qu'il ne contient pas de chemin, vous pouvez également utiliser:

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

$fname est un nom du fichier, par exemple: my_picture.jpg Et le résultat serait: jpg


8
2017-08-11 12:42



Le moyen le plus simple d'obtenir l'extension de fichier en PHP est d'utiliser la fonction intégrée php pathinfo.

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

7
2018-05-13 06:44