Question

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 existe toujours "le meilleur moyen" et il devrait être sur Stack Overflow.

Était-ce utile?

La solution

Les personnes d'autres langages de script pensent toujours que c'est mieux, car elles ont une fonction intégrée pour le faire et non pas PHP (je regarde actuellement Pythonistas: -)).

En fait, cela existe, mais peu de gens le savent. Découvrez 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 voulez pouvoir gérer les caractères non ASCII, vous devez d'abord définir les paramètres régionaux. E.G:

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, et non pour un chemin de ressources URL, couvert par PARSE_URL.

Profitez

Autres conseils

pathinfo ()

$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

Pour les URL, n'utilisez pas 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'

Utilisez PARSE_URL au lieu de cela:

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

Pour tous les exemples PHP natifs, voir: Obtenir l'URL complète dans PHP

Il existe également SplFileInfo :

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

Souvent, vous pouvez écrire un meilleur code si vous transmettez un tel objet au lieu d’une chaîne, votre code parle alors davantage. Depuis PHP 5.4, il s’agit d’un one-liner:

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

La réponse E-satis est le moyen correct de déterminer l'extension du fichier.

Sinon, au lieu de vous appuyer sur une extension de fichier, vous pouvez utiliser le fichier info ( http: //us2.php. net / 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(

La réponse E-satis est le moyen correct de déterminer l'extension du fichier.

Sinon, au lieu de vous appuyer sur une extension de fichier, vous pouvez utiliser le fichier info ( http: //us2.php. net / 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:

<*>FILES['image']['tmp_name'], FILEINFO_MIME)) { case 'image/jpg': $im = imagecreatefromjpeg(

La réponse E-satis est le moyen correct de déterminer l'extension du fichier.

Sinon, au lieu de vous appuyer sur une extension de fichier, vous pouvez utiliser le fichier info ( http: //us2.php. net / 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:

<*>FILES['image']['tmp_name']); break; case 'image/png': $im = imagecreatefrompng(

La réponse E-satis est le moyen correct de déterminer l'extension du fichier.

Sinon, au lieu de vous appuyer sur une extension de fichier, vous pouvez utiliser le fichier info ( http: //us2.php. net / 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:

<*>FILES['image']['tmp_name']); break; case 'image/gif': $im = imagecreatefromgif(

La réponse E-satis est le moyen correct de déterminer l'extension du fichier.

Sinon, au lieu de vous appuyer sur une extension de fichier, vous pouvez utiliser le fichier info ( http: //us2.php. net / 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:

<*>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

<*>

// EDIT: suppression d'un crochet

Tant qu'il ne contient pas de chemin d'accès, 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

Il est parfois 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 (en général, il les supprime simplement de la sortie), dans les extensions qui ne posent généralement pas de problème mais ne font pas mal conscient de cette mise en garde.

Le moyen le plus simple d’obtenir une 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
substr($path, strrpos($path, '.') + 1);

Une solution rapide ressemblerait à ceci.

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

Voici un exemple, supposons que $ nomfichier soit "exemple.txt"

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

Donc $ ext sera "quot.txt"

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

vous pouvez aussi essayer ceci
(travaux sur php 5. * et 7)

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

tip: retourne une chaîne vide si le fichier n'a pas d'extension
profitez-en;)

Cela fonctionnera

$ext = pathinfo($filename, PATHINFO_EXTENSION);

J'ai constaté que les solutions pathinfo () et SplFileInfo fonctionnent bien pour les fichiers standard sur le système de fichiers local, mais vous pouvez rencontrer des difficultés si vous travaillez avec Les fichiers distants en tant qu'URL pour des images valides peuvent avoir un # (identificateurs de fragment) et / ou un ? (paramètres de requête) à la fin de l'URL, qui seront ces deux solutions ( incorrect) à traiter dans le cadre de l'extension de fichier.

J'ai trouvé qu'il s'agissait d'un moyen fiable d'utiliser pathinfo () sur une URL après la première analyse syntaxique pour éliminer 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()

vous pouvez aussi essayer ceci:

 pathinfo(basename( 

vous pouvez aussi essayer ceci:

<*>FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)

Pourquoi ne pas utiliser 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 obtenir toutes les extensions de fichier sur un dossier particulier et effectuer une opération avec une extension de fichier spécifique

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

Si vous recherchez de la vitesse (par exemple dans un routeur), vous ne voulez probablement pas tout marquer. De nombreuses autres réponses échoueront avec /root/my.folder/my.css

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

Bien que le "meilleur moyen" est discutable, je pense que c’est le meilleur moyen pour plusieurs raisons:

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. Cela fonctionne avec plusieurs parties d'une extension, par exemple tar.gz
  2. Code court et efficace
  3. Cela fonctionne avec un nom de fichier et un chemin complet

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

IMO C’est la meilleure solution si vous avez des noms de fichiers tels que name.name.name.ext (moche mais cela arrive parfois)

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

Utiliser

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

pour récupérer rapidement une extension (si vous êtes certain que votre nom de fichier en a un).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top