Quel est le meilleur moyen de connaître le type de fichier d'un fichier en php ? J'ai entendu dire que le navigateur pouvait être trompé, alors quelle est la meilleure façon de procéder ?
Réponses
Trop de publicités?Vous pouvez utiliser finfo_file
<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>
Regardez les "chiffres magiques". Les premiers octets des fichiers permettent généralement d'identifier le type de fichier. Par exemple, les premiers octets d'un GIF sont soit 47 49 46 38 37 61, soit 47 49 46 38 39 61, ASCII pour GIF89a ou GIF87a. Il existe de nombreux autres "nombres magiques". Voir http://en.wikipedia.org/wiki/Magic_number_(programmation)#Nombres_magiques_dans_les_fichiers
EDIT : Je crois que c'est plus fiable que les fonctions MIME de PHP.
Je pense que vous voulez dire finfo_file() pour découvrir le mimetype
de php.net Exemple :
<?php
$finfo = finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
?>
Vous ne pouvez pas vous fier au Content-Type renvoyé par le navigateur. Il est basé sur l'extension du fichier et peut être facilement trompé.
En tant que stalepretzel l'a mentionné, la meilleure façon de deviner le type de contenu d'un fichier est d'utiliser des nombres magiques. Si votre serveur tourne sur une machine *nix, vous pouvez utiliser cette fonction :
<?php
function get_file_type($file) {
if(function_exists('shell_exec') === TRUE) {
$dump = shell_exec(sprintf('file -bi %s', $file));
$info = explode(';', $dump);
return $info[0];
}
return FALSE;
}
?>
Usage: $file_type = get_file_type('my_file_name.ext');
PD : consultez /usr/share/magic.mime pour plus d'informations.