Comment obtenir l'extension d'un fichier en PHP : du débutant au pro en 2025
\n\nVous êtes-vous déjà demandé combien de fois par jour un développeur PHP doit extraire l'extension d'un fichier ? Des dizaines, voire des centaines de fois. Téléchargement d'avatars, traitement de documents, validation d'images — partout, il faut savoir quelle bête vous avez reçue : .jpg, .pdf ou le sournois .php.jpg.
La question "How can I get a file's extension in PHP?" est l'une des plus populaires sur Stack Overflow. Et pour cause. Quoi de plus simple en apparence ? Mais le diable se cache dans les détails. En 2025, nous n'avons pas seulement les classiques pathinfo() et explode(), mais aussi les nouvelles fonctionnalités de PHP 8.4 qui rendent le code plus propre et plus sûr.
Passons en revue 5 méthodes efficaces, leurs avantages, leurs inconvénients et quand les utiliser. C'est parti !
\n\n1. L'incontournable : pathinfo() — le roi des méthodes
\n\nLa méthode la plus populaire et la plus correcte est la fonction pathinfo(). Apparue dès PHP 4, elle reste toujours d'actualité. Pourquoi ? Parce qu'elle est intelligente : elle prend en compte les séparateurs de chemins système, fonctionne avec les URL et ne se casse pas sur les points dans le nom du fichier.
<?php\n$file = 'document.report.pdf';\n$extension = pathinfo($file, PATHINFO_EXTENSION);\n// Résultat : 'pdf'\n?>\n\nMais attention. Si le fichier n'a pas d'extension, pathinfo() retourne une chaîne vide. Pas null, pas false — une chaîne vide. C'est important pour les vérifications strictes.
<?php\n$file = 'README';\n$ext = pathinfo($file, PATHINFO_EXTENSION);\nvar_dump($ext); // string(0) ""\n?>\n\nQuand l'utiliser : toujours, lorsque vous avez besoin d'obtenir rapidement et fiablement l'extension. C'est la référence du secteur.
\n\n2. La méthode à l'ancienne : explode() et strrpos()
\n\nCertains développeurs de la vieille école préfèrent l'analyse manuelle des chaînes. L'idée est simple : trouver le dernier point et prendre tout ce qui le suit.
\n\n<?php\n$file = 'image.jpg';\n$parts = explode('.', $file);\n$extension = end($parts);\n// Résultat : 'jpg'\n?>\n\nCela semble fonctionner. Mais il y a un piège : explode() crée un tableau, et end() déplace le pointeur interne du tableau. Ce n'est pas critique, mais ce n'est pas élégant.
Une variante plus performante : strrpos() + substr() :
<?php\n$file = 'archive.tar.gz';\n$pos = strrpos($file, '.');\n$extension = $pos !== false ? substr($file, $pos + 1) : '';\n// Résultat : 'gz'\n?>\n\nRemarque : strrpos() cherche la dernière occurrence du point. C'est correct — nous voulons gz, pas tar.gz.
Quand l'utiliser : lorsque pathinfo() n'est pas disponible (cas rare) ou que vous avez besoin de plus de contrôle sur la logique.
3. Nouveauté 2025 : str_contains() et str_starts_with()
\n\nPHP 8.0 a introduit str_contains() et str_starts_with(), et PHP 8.4 améliore la gestion des chaînes multi-octets. Cela ouvre de nouvelles possibilités élégantes.
<?php\n$file = 'photo.2025.jpg';\n\nif (str_contains($file, '.')) {\n $extension = substr($file, strrpos($file, '.') + 1);\n} else {\n $extension = '';\n}\n// Résultat : 'jpg'\n?>\n\nÉlégant ? Pas vraiment. Mais si vous devez vérifier si un fichier est une image, str_ends_with() est votre allié :
<?php\n$file = 'avatar.png';\n$isImage = str_ends_with($file, '.png') || str_ends_with($file, '.jpg');\n// true\n?>\n\nQuand l'utiliser : pour des vérifications rapides d'extensions spécifiques sans avoir à extraire l'extension entière.
\n\n4. Expressions régulières : quand il faut tout et tout de suite
\n\nParfois, une seule extension ne suffit pas. Par exemple, vous devez vérifier que le fichier est une image sécurisée et en extraire le nom sans extension. C'est là que les expressions régulières entrent en jeu.