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 "la meilleure façon" et cela devrait être sur Stack Overflow.
php
file-extension
e-satis
la source
la source
strrchr($filename, '.');
Réponses:
Les gens d'autres langages de script pensent toujours que le leur est meilleur car ils ont une fonction intégrée pour faire ça et pas PHP (je regarde Pythonistas en ce moment :-)).
En fait, il existe, mais peu de gens le savent. Rencontrez
pathinfo()
:C'est rapide et intégré.
pathinfo()
peut vous donner d'autres informations, telles que le chemin canonique, selon la constante que vous lui passez.N'oubliez pas que si vous voulez pouvoir traiter des caractères non ASCII, vous devez d'abord définir les paramètres régionaux. PAR EXEMPLE:
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 URL, qui est couvert à l'aide de PARSE_URL.
Prendre plaisir
la source
function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); }
assurez-vous que le fichier a une extension, il peut faire n'importe quoi lorsque vous passez un chemin en argument!pathinfo()
la source
echo pathinfo('/foo/bar/baz.bill')['extension'];
Exemple d'URL:
http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
A) N'utilisez pas les suggestions d'insécurité
PATHINFO
:B) Utilisez PARSE_URL :
BONUS: Voir tous les exemples PHP natifs
la source
foo_folder/foo-file.jpg?1345838509
échouera lamentablement avec justepathinfo
,parse_url
est pour l'URL etpathinfo
pour le chemin du fichier.Il y a aussi
SplFileInfo
:Souvent, vous pouvez écrire un meilleur code si vous passez un tel objet au lieu d'une chaîne. Votre code est plus parlant alors. Depuis PHP 5.4, il s'agit d'une ligne unique:
la source
->getExtension()
noter qu'il est disponible dans SplFileInfo depuis PHP 5.3.6.La réponse d'E-satis est la bonne façon de déterminer l'extension du fichier.
Alternativement, au lieu de compter sur une extension de fichiers, vous pouvez utiliser le 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:
la source
Tant qu'il ne contient pas de chemin, vous pouvez également utiliser:
Où
$fname
est un nom du fichier, par exemple:my_picture.jpg
. Et le résultat serait:jpg
la source
1) Si vous utilisez (PHP 5> = 5.3.6), vous pouvez utiliser SplFileInfo :: getExtension - Obtient l'extension de fichier
Exemple de code
Cela produira
2) Une autre façon d'obtenir l'extension si vous utilisez (PHP 4> = 4.0.3, PHP 5) est pathinfo
Exemple de code
Cela produira
// EDIT: suppression d'un crochet
la source
Parfois, il est utile de ne pas l'utiliser
pathinfo($path, PATHINFO_EXTENSION)
. Par exemple: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, ce n'est généralement pas un problème, mais cela ne fait pas de mal d'être conscient de cette mise en garde.la source
test.19-02-2014.jpeg
ltrim(strrchr($PATH, '.'),'.')
fonctionne comme pathinfo, mais sans tout tokeniser.La façon la plus simple d'obtenir une extension de fichier en PHP consiste à utiliser la fonction intégrée PHP de pathinfo .
la source
Vous pouvez également essayer ceci (cela fonctionne sur PHP 5. * et 7):
Astuce: il renvoie une chaîne vide si le fichier n'a pas d'extension
la source
Désolé ... "Question courte; mais PAS réponse courte"
Exemple 1 pour PATH
Exemple 2 pour URL
Sortie de l'exemple 1:
Sortie de l'exemple 2:
Références
https://www.php.net/manual/en/function.pathinfo.php
https://www.php.net/manual/en/function.realpath.php
https://www.php.net/manual/en/function.parse-url.php
la source
Une solution rapide serait quelque chose comme ça.
la source
$file_ext = end(explode('.', $filename));
faire tout ce qui est dans cette réponse sur une seule ligne au lieu de quatre..tar.gz
. Cela ne fonctionnera pas, donc si vous avez besoin d'une extension complète, utilisez par exempleltrim(strstr($filename, '.'), '.');
pour obtenir une extension complète à la place de manière incorrectegz
.Voici un exemple. Supposons que $ filename soit "example.txt",
Donc $ ext sera ".txt".
la source
pathinfo est un tableau. Nous pouvons vérifier le nom du répertoire, le nom du fichier, l'extension , etc.:
la source
la source
Vous pouvez également essayer ceci:
la source
la source
Cela fonctionnera
la source
J'ai trouvé que les solutions
pathinfo()
etSplFileInfo
fonctionnent bien pour les fichiers standard sur le 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 traiteront (incorrectement) comme faisant partie de l'extension de fichier.J'ai trouvé que c'était un moyen fiable à utiliser
pathinfo()
sur une URL après la première analyse pour éliminer l'encombrement inutile après l'extension de fichier:la source
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
la source
Vous pouvez obtenir toutes les extensions de fichier dans un dossier particulier et effectuer des opérations avec une extension de fichier spécifique:
la source
Fais le plus vite.
Les appels de bas niveau doivent être très rapides , j'ai donc pensé que cela valait la peine d'être étudié. J'ai essayé quelques méthodes (avec différentes longueurs de chaîne, longueurs d'extension, plusieurs exécutions chacune), en voici quelques-unes raisonnables:
Les résultats n'étaient pas très surprenants. Pauvre
pathinfo
est (de loin!) Le plus lent (on dirait qu'il essaie d'analyser le tout puis de supprimer toutes les parties inutiles) - etmethod3()
(strrpos) est de loin le plus rapide:REMARQUE: la première méthode a un effet secondaire: elle renvoie le nom complet lorsqu'il n'y a pas d'extension. Cela n'aurait sûrement aucun sens de le mesurer avec un strpos supplémentaire pour éviter ce comportement.
Conclusion
Cela ressemble à la Voie du Samouraï:
la source
Si vous recherchez la vitesse (comme dans un routeur), vous ne voudrez probablement pas tout symboliser. Beaucoup d'autres réponses échoueront avec
/root/my.folder/my.css
la source
Bien que la "meilleure façon" soit discutable, je pense que c'est la meilleure façon pour plusieurs raisons:
tar.gz
la source
OMI, c'est le meilleur moyen si vous avez des noms de fichiers comme name.name.name.ext (moche, mais cela arrive parfois):
la source
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);
approche preg_replace nous utilisons la recherche et le remplacement d'expressions régulières. Dans la fonction preg_replace, le premier paramètre est le modèle de la recherche, le deuxième paramètre $ 1 est une référence à tout ce qui correspond au premier (. *) Et le troisième paramètre est le nom du fichier.
Une autre façon, nous pouvons également utiliser strrpos pour trouver la position de la dernière occurrence d'un '.' dans un nom de fichier et incrémentez cette position de 1 afin qu'il explose la chaîne de (.)
$ext = substr($fileName, strrpos($fileName, '.') + 1);
la source
En fait, je cherchais ça.
la source
Utilisation
pour une récupération rapide de l'extension (si vous savez avec certitude que votre nom de fichier en a un).
la source