php mime-types

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)