496 votes

Comment obtenir l'extension de fichier en PHP ?

Je souhaite obtenir l'extension de fichier d'une image que je télécharge, mais je n'obtiens qu'un tableau en retour.

$userfile_name = $_FILES['image']['name'];
$userfile_extn = explode(".", strtolower($_FILES['image']['name']));

Y a-t-il un moyen d'obtenir l'extension elle-même ?

1294voto

ThiefMaster Points 135805

Il n'est pas nécessaire d'utiliser les fonctions de chaîne de caractères. Vous pouvez utiliser quelque chose qui est réellement conçu pour ce que vous voulez : pathinfo() :

$path = $_FILES['image']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);

0 votes

$path = $_FILES['image']['name'][0] ; le nom réel du fichier est dans un tableau. pathinfo n'évaluera qu'une chaîne de caractères.

11 votes

@foureight84 : C'est seulement le cas si vous avez des champs de téléchargement nommés image[] ...

2 votes

J'ai un peu modifié votre code et créé une fonction, au cas où quelqu'un voudrait utiliser une fonction. Voici le code : function getFileExtension($path) { $ext = pathinfo($path, PATHINFO_EXTENSION) ; return $ext ; }

65voto

Andrey Points 269

Cela fonctionnera également :

$array = explode('.', $_FILES['image']['name']);
$extension = end($array);

19 votes

Seules les variables doivent être passées par référence", le manuel PHP

1 votes

Ce n'est pas une bonne approche puisque le end est destinée à déplacer le pointeur interne d'un tableau à la fin du tableau et à retourner cet élément. Le problème est que le tableau est passé par référence et comme votre tableau est généré dynamiquement, il ne peut pas être passé par référence, d'où l'avertissement ou l'échec, selon votre version de PHP.

32 votes

Note importante : Cela échouera avec des chemins comme : /var/www/website.com/somefile (vous feriez mieux d'utiliser pathinfo).

34voto

Julien Points 1064

Une meilleure méthode consiste à utiliser strrpos + substr (plus rapide que explode pour cela) :

$userfile_name = $_FILES['image']['name'];
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1);

Mais, pour vérifier le type d'un fichier, utiliser mime_content_type est une meilleure solution : http://www.php.net/manual/en/function.mime-content-type.php

6 votes

Mieux que pathinfo() ? Je ne pense pas.

3 votes

C'est mieux que d'exploser ;-). Mais, vous avez raison, pathinfo est un meilleur moyen lorsqu'il est activé (certains serveurs mutualisés désactivent cette fonction...).

16 votes

Note importante : Cela échouera avec des chemins comme : /var/www/website.com/somefile .

24voto

Balan Points 161

Vous pouvez essayer avec ceci pour le type de mime

$image = getimagesize($_FILES['image']['tmp_name']);

$image['mime'] retournera le type mime.

Cette fonction ne nécessite pas la bibliothèque GD. Vous pouvez trouver la documentation aquí .

Ceci renvoie le type mime de l'image.

Certaines personnes utilisent le $_FILES["file"]["type"] mais il n'est pas fiable car il a été donné par le navigateur et non par PHP.

Vous pouvez utiliser pathinfo() comme ThiefMaster l'a suggéré pour récupérer l'extension de l'image.

Assurez-vous d'abord que l'image est téléchargée avec succès pendant le développement avant d'effectuer toute opération sur l'image.

12voto

ilanco Points 3980

Et si

$ext = array_pop($userfile_extn);

8 votes

Je ne le recommande pas. Vous comptez sur le fait que l'ordre du tableau sera le même dans les années à venir. C'est une solution paresseuse qui causera très probablement des problèmes à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X