Question

Quel est le meilleur moyen de découvrir le type de fichier d'un fichier au sein de php? J'ai entendu dire que le navigateur pouvait être trompé. Alors, quel meilleur moyen de le faire?

Était-ce utile?

La solution

Vous pouvez utiliser le fichier_finfo

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

Autres conseils

Regardez les "nombres magiques". Les premiers octets de fichiers identifient généralement le type de fichier. Par exemple, les premiers octets d'un fichier GIF sont 47 49 46 38 37 61 ou 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_numbers_in_files" rel="noreferrer"> http://fr.wikipedia.org/wiki/Magic_numbers_in_files" rel="noreferrer"> http://en.wikipedia.org/wiki/Magic_numbers_in_files" programmation=Magic_numbers_in_files

EDIT: Je pense que cela est plus fiable que les fonctions MIME sur PHP.

Je pense que vous voulez dire finfo_file () à découvrir type MIME

à partir 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 faire confiance au type de contenu renvoyé par le navigateur. Il est basé sur l’extension de fichier et peut être facilement dupé.

Comme stalepretzel l'a mentionné, le meilleur moyen de deviner que le type de contenu de fichier utilise des nombres magiques. Si votre serveur fonctionne sur un ordinateur * 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top