sto usando questa funzione, che comprende diversi fallback per compensare le vecchie versioni di PHP o risultati semplicemente cattivi:
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;
}
Si tenta di utilizzare il più recenti funzioni PHP finfo
. Se questi non sono disponibili, utilizza l'alternativa mime_content_type
e include la sostituzione drop-in dalla libreria Upgrade.php per accertarsi che esista. Se quelli non restituiscono nulla di utile, proveranno il comando file
del SO. AFAIK disponibile solo su sistemi * NIX, potresti volerlo modificare o eliminarlo se prevedi di usarlo su Windows. Se non funziona nulla, prova exif_imagetype
come fallback solo per le immagini.
Sono venuto a notare che diversi server variano ampiamente nel loro supporto per le funzioni di tipo mime e che la sostituzione di Upgrade.php mime_content_type
è lungi dall'essere perfetta. Le limitate funzioni exif_imagetype
, sia quelle originali che quelle di Upgrade.php, funzionano comunque in modo abbastanza affidabile. Se sei solo preoccupato per le immagini, potresti voler usare solo quest'ultimo.
Ottenere il tipo mime di un file in PHP st malato è piuttosto un dolore in a ** ... ;-) –