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 cela devrait être sur Stack Overflow.
Les personnes d'autres langages de script pensent toujours qu'elles sont meilleures parce qu'elles ont une fonction intégrée pour le faire et non pas PHP (je suis en train de regarder Pythonistas en ce moment :-)).
En fait, cela existe, mais peu de gens le savent. Rencontrez 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 transmettez.
N'oubliez pas que si vous souhaitez gérer les 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 pour un chemin de ressources URL, qui est couvert à l'aide de PARSE_URL.
Prendre plaisir
$path_info = pathinfo('/foo/bar/baz.bill');
echo $path_info['extension']; // "bill"
Exemple d'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'
_
Remarque: les hashtags ne sont pas disponibles côté serveur, uniquement s'ils ont été ajoutés manuellement.
Il y a aussi SplFileInfo
:
$file = new SplFileInfo($path);
$ext = $file->getExtension();
Souvent, vous pouvez écrire un meilleur code si vous transmettez un tel objet à la place d'une chaîne. Votre code est plus parlé alors. Depuis PHP 5.4, il s’agit d’un one-liner:
$ext = (new SplFileInfo($path))->getExtension();
La réponse de E-satis est la bonne façon de déterminer l'extension de fichier.
Au lieu de compter sur une extension de fichier, vous pouvez également utiliser le paramètre fileinfo pour déterminer le type de fichier MIME.
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;
}
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 produira
string(3) "png"
string(2) "gz"
2) Un autre moyen 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 produira
string(3) "png"
string(2) "gz"
// EDIT: enlevé un crochet
Tant qu'il ne contient pas de chemin, vous pouvez également utiliser:
array_pop(explode('.', $fname))
Où $fname
est le nom du fichier, par exemple: my_picture.jpg
. Et le résultat serait: jpg
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 les extensions, cela ne pose généralement pas de problème, mais il n’est pas inutile de prendre conscience de cette mise en garde.
Vous pouvez aussi essayer ceci (cela fonctionne sur PHP 5. * et 7):
$info = new SplFileInfo('test.Zip');
echo $info->getExtension(); // ----- Output -----> Zip
Astuce: il retourne une chaîne vide si le fichier n'a pas d'extension
Le moyen le plus simple d'obtenir l'extension de fichier dans PHP consiste à utiliser la fonction intégrée de PHP 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
Une solution rapide serait quelque chose comme ça.
// 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 est un tableau. Nous pouvons vérifier le nom du répertoire, le nom du fichier, l’extension , 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";
Voici un exemple. Supposons que $ nomfichier soit "exemple.txt",
$ext = substr($filename, strrpos($filename, '.', -1), strlen($filename));
Donc, $ ext sera ".txt".
Ça va marcher
$ext = pathinfo($filename, PATHINFO_EXTENSION);
J'ai trouvé que les solutions pathinfo()
et SplFileInfo
fonctionnaient bien pour les fichiers standard du système de fichiers local, mais vous pouvez rencontrer des difficultés si vous travaillez avec des fichiers distants, car les URL des images valides peuvent avoir un #
(identificateurs de fragment) et/ou ?
(paramètres de requête) à la fin de l'URL, que ces deux solutions vont (incorrectement) traiter comme faisant partie de l'extension de fichier.
J'ai trouvé que c'était un moyen fiable d'utiliser pathinfo()
sur une URL après la première analyse, afin de supprimer l'encombrement inutile après l'extension de fichier:
$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()
Utilisez substr($path, strrpos($path,'.')+1);
. C'est la méthode la plus rapide de toutes les comparaisons.
@Kurt Zhong a déjà répondu.
Vérifions le résultat comparatif ici: https://eval.in/661574
Vous pouvez aussi essayer ceci:
pathinfo(basename($_FILES["fileToUpload"]["name"]), PATHINFO_EXTENSION)
Bien que la "meilleure façon" soit discutable, je crois que c'est la meilleure pour plusieurs raisons:
function getExt($path)
{
$basename = basename($path);
return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
tar.gz
Vous pouvez obtenir toutes les extensions de fichier dans un dossier particulier et effectuer des opérations avec une extension de fichier spécifique:
<?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);
?>
Si vous recherchez de la vitesse (dans un routeur, par exemple), vous ne voulez probablement pas tout marquer. Beaucoup d'autres réponses vont échouer avec /root/my.folder/my.css
ltrim(strrchr($PATH, '.'),'.');
OMI, c'est la meilleure façon si vous avez des noms de fichiers comme nom.nom.nom.ext (moche, mais cela arrive parfois):
$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;
En fait, je cherchais ça.
<?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, '.'), '.')
c’est le meilleur moyen si vous avez un nom de fichier comme nom.nom.nom.ext (moche, mais il arrive parfois