Obteniendo mime tipo de nombre de archivo en php
mime-types (1)
Tengo la siguiente función para producir el tipo mime a partir de un nombre de archivo:
function get_mime_type($file) {
if (function_exists(''finfo_open'')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $file);
finfo_close($finfo);
}
else {
$mimetype = mime_content_type($file);
}
if (empty($mimetype)) $mimetype = ''application/octet-stream'';
return $mimetype;
}
Llamo a esta función en esta parte de mi código:
$out[''uploads''][] = array(
''filename'' => $fldrow[''field_value''],
''mimetype'' => get_mime_type($fldrow[''field_value'']),
''id'' => $fldrow[''ID''],
);
$fldrow[''field_value'']
contiene ''card.pdf''
Estoy esperando ''application/pdf''
Estoy recibiendo ''application/octet-stream''
También probé este enfoque más elaborado utilizando el modo = 1: ¿la forma alternativa de verificar el tipo de Mime de PHP?
Los mismos resultados en Modo = 1 y en blanco en Modo = 0.
¿Qué puedo estar haciendo mal aquí?
EDITAR Mi solución basada en la respuesta de Dymen1 y después de ver otras publicaciones en esa dirección es la siguiente:
function get_mime_type($filename) {
$idx = explode( ''.'', $filename );
$count_explode = count($idx);
$idx = strtolower($idx[$count_explode-1]);
$mimet = array(
''txt'' => ''text/plain'',
''htm'' => ''text/html'',
''html'' => ''text/html'',
''php'' => ''text/html'',
''css'' => ''text/css'',
''js'' => ''application/javascript'',
''json'' => ''application/json'',
''xml'' => ''application/xml'',
''swf'' => ''application/x-shockwave-flash'',
''flv'' => ''video/x-flv'',
// images
''png'' => ''image/png'',
''jpe'' => ''image/jpeg'',
''jpeg'' => ''image/jpeg'',
''jpg'' => ''image/jpeg'',
''gif'' => ''image/gif'',
''bmp'' => ''image/bmp'',
''ico'' => ''image/vnd.microsoft.icon'',
''tiff'' => ''image/tiff'',
''tif'' => ''image/tiff'',
''svg'' => ''image/svg+xml'',
''svgz'' => ''image/svg+xml'',
// archives
''zip'' => ''application/zip'',
''rar'' => ''application/x-rar-compressed'',
''exe'' => ''application/x-msdownload'',
''msi'' => ''application/x-msdownload'',
''cab'' => ''application/vnd.ms-cab-compressed'',
// audio/video
''mp3'' => ''audio/mpeg'',
''qt'' => ''video/quicktime'',
''mov'' => ''video/quicktime'',
// adobe
''pdf'' => ''application/pdf'',
''psd'' => ''image/vnd.adobe.photoshop'',
''ai'' => ''application/postscript'',
''eps'' => ''application/postscript'',
''ps'' => ''application/postscript'',
// ms office
''doc'' => ''application/msword'',
''rtf'' => ''application/rtf'',
''xls'' => ''application/vnd.ms-excel'',
''ppt'' => ''application/vnd.ms-powerpoint'',
''docx'' => ''application/msword'',
''xlsx'' => ''application/vnd.ms-excel'',
''pptx'' => ''application/vnd.ms-powerpoint'',
// open office
''odt'' => ''application/vnd.oasis.opendocument.text'',
''ods'' => ''application/vnd.oasis.opendocument.spreadsheet'',
);
if (isset( $mimet[$idx] )) {
return $mimet[$idx];
} else {
return ''application/octet-stream'';
}
}
Si verifica la documentación, puede ver que no está haciendo nada incorrecto. Pero si haces un poco más de investigación:
https://.com/a/3664655/3784145
puede ver que el tipo de mime que obtiene es correcto, pero la extensión no necesita coincidir con el tipo de mime como se explica aquí:
http://nl3.php.net/manual/en/function.mime-content-type.php#85879
Por lo tanto, usaría el sufijo de archivos para determinar el tipo de archivo mime (como se ve en el primer ejemplo)