Vous utilisez / usr / bin / file pour déterminer le type de fichier?
-
28-10-2019 - |
Question
Je prévois d'utiliser ce programme système / usr / bin / file pour déterminer le type de contenu du fichier téléchargé, puis agir en conséquence.
Est-ce une bonne idée ou y a-t-il des choses auxquelles je dois faire attention?(Ou utilisez quelque chose de complètement différent)
La solution
PHP a l'extension fileinfo , qui utilise le même mécanisme maisest natif de PHP.
Autres conseils
mime_content_type
et finfo_file
sont les méthodes préférées pour déterminer un type mime (l'une ou l'autre est souvent activée dans la plupart des distributions php).Ils utilisent la même base de données magic.mime que l'outil externe, c'est pourquoi je ne l'utiliserais que comme solution de secours.
L'utilisation de l'outil externe nécessite également d'extraire le type mime de la sortie, donc cela implique un peu du code:
$type = exec("/usr/bin/file -iL " .escapeshellcmd($fn). " 2>/dev/null");
if ($type = trim(strtok(substr(strrchr($type, ":"), 1), ";"))) {
return $type;
}
Si votre question porte sur la fiabilité: oui, c'est une bonne approche.La détermination du type de fichier par octets magiques est assez fiable sur tous les serveurs Linux / U * ix actuels.
Si vous pouvez utiliser une extension PECL (ou si vous utilisez php>= 5.3), je vous recommande d'utiliser le Extension Fileinfo .
Sinon, la fonction mime_content_type () fera l'affaire, mais veuillez noter qu'il est désormais obsolète (en faveur ou fileinfo)