estoy usando esta función, que incluye varios mecanismos de emergencia para compensar las versiones anteriores de PHP o resultados simplemente malas:
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;
}
Se trata de utilizar la funciones más nuevas de PHP finfo
. Si no están disponibles, usa la alternativa mime_content_type
e incluye el reemplazo directo de la biblioteca Upgrade.php para asegurarse de que esto exista. Si no devuelve nada útil, probará el comando OS 'file
. AFAIK, que solo está disponible en los sistemas * NIX, es posible que desee cambiarlo o deshacerse de él si planea usarlo en Windows. Si nada funcionó, intenta exif_imagetype
como reserva para imágenes solamente.
Me he dado cuenta de que los diferentes servidores varían ampliamente en su soporte para las funciones de tipo mime, y que el reemplazo de Upgrade.php mime_content_type
está lejos de ser perfecto. Sin embargo, las funciones limitadas de exif_imagetype
, tanto la original como la de Upgrade.php, funcionan de manera bastante confiable. Si solo le preocupan las imágenes, es posible que solo desee utilizar esta última.
Obteniendo el tipo mime de un archivo en PHP st enfermo es absolutamente un dolor en el ** ... ;-) –