7 votes

Meilleure façon de reconnaître un type de fichier en php

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 ?

14voto

kajyr Points 871

Vous pouvez utiliser finfo_file

<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>

6voto

stalepretzel Points 4057

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.

5voto

Luis Melgratti Points 6297

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

3voto

Y.G.J Points 307

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.

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