J'utilise cette fonction, qui comprend plusieurs solutions de repli pour compenser les anciennes versions de PHP ou des résultats simplement mauvais:
function getFileMimeType($file) {
if (function_exists('finfo_file')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $file);
finfo_close($finfo);
} else {
require_once 'upgradephp/ext/mime.php';
$type = mime_content_type($file);
}
if (!$type || in_array($type, array('application/octet-stream', 'text/plain'))) {
$secondOpinion = exec('file -b --mime-type ' . escapeshellarg($file), $foo, $returnCode);
if ($returnCode === 0 && $secondOpinion) {
$type = $secondOpinion;
}
}
if (!$type || in_array($type, array('application/octet-stream', 'text/plain'))) {
require_once 'upgradephp/ext/mime.php';
$exifImageType = exif_imagetype($file);
if ($exifImageType !== false) {
$type = image_type_to_mime_type($exifImageType);
}
}
return $type;
}
Il essaie d'utiliser la nouvelles fonctions PHP finfo
. Si ceux-ci ne sont pas disponibles, il utilise l'alternative mime_content_type
et inclut le remplacement de la bibliothèque Upgrade.php pour s'assurer que cela existe. Si ceux-ci n'ont rien retourné d'utile, ils vont essayer la commande file
du système d'exploitation. Je pense que c'est seulement disponible sur les systèmes * NIX, vous pouvez vouloir changer cela ou vous en débarrasser si vous prévoyez d'utiliser cela sur Windows. Si rien n'a fonctionné, il essaie exif_imagetype
comme solution de repli pour les images seulement.
Je suis venu à remarquer que les différents serveurs varient considérablement dans leur prise en charge des fonctions de type MIME, et que le remplacement Upgrade.php mime_content_type
est loin d'être parfait. Les fonctions limitées exif_imagetype
, à la fois l'original et le remplacement Upgrade.php, fonctionnent assez bien cependant. Si vous êtes seulement préoccupé par les images, vous pouvez seulement vouloir utiliser ce dernier.
Obtenir le type mime d'un fichier en PHP st mal est une douleur dans le a ** ... ;-) –