Comandos 'file --mime-type' y 'mimetype' que devuelven resultados diferentes


9

Hola, estoy tratando de averiguar por qué PHP está devolviendo un tipo de archivo 'msword' cuando debería ser 'excel', así que lo probé en mi caja de Ubuntu usando los comandos 'file' y 'mimetype'. Como puede ver en los resultados a continuación, devuelven resultados diferentes. ¿Alguien puede explicar por qué?

root@dev:~# file --mime-type 1.xls
1.xls: application/msword
root@dev:~# mimetype 1.xls
1.xls: application/vnd.ms-excel

También debo tener en cuenta que el archivo en cuestión devuelve 'msword' en un servidor de Windows. Fue generado usando PHPExcel.

Gracias por tu ayuda.

Respuestas:


7

fileobtiene sus resultados de /etc/mime.types.

Desde allí:

aplicación / Mathica-old
aplicación / ms-tnef
aplicación / msaccess mdb
aplicación / msword doc dot
application / news-message-id
aplicación / transmisión de noticias
application / ocsp-request
application / ocsp-response

mimetype lo obtiene de ...

ENVIRONMENT

   XDG_DATA_HOME
   XDG_DATA_DIRS
       These variables can list base directories to search for data files.
       The shared mime-info will be expected in the "mime" sub directory
       of one of these directories. If these are not set, there will be
       searched for the following directories:

               $HOME/.local/share/mime
               /usr/local/share/mime
               /usr/share/mime

       See also the "XDG Base Directory Specification"
       http://freedesktop.org/Standards/basedir-spec
       <http://freedesktop.org/Standards/basedir-spec>

Vale la pena señalar esta parte de la página del manual para mimetype:

Para nombrar interruptores, seguí la página de manual del archivo (1) versión 4.02 cuando fue posible. Parecen diferir completamente de la especificación en el capítulo 'utilidades' de IEEE Std 1003.1-2001 (POSIX).

Por lo tanto, puede llamarlo un error contra el archivo, /etc/mime.typesya que vnd.ms-exceles más preciso.


Parece que estoy atrapado con el problema en Windows y Linux. Gracias por la explicación.
scampbell

sí, y pensando en ello ... mimetype probablemente sea solo de escritorio, por lo que cuando se trata de un servidor va a usar un archivo.
Rinzwind

Estoy en 12.04 y parece que la edición /etc/mime.typesno afecta los resultados de file.
congusbongus

5

Hay una diferencia similar entre las dos herramientas para .debpaquetes.

Se parece que los usos de archivos /etc/mime.typesy mimetypeutiliza una papilla mucho más complicada de XDG_DATA_DIRS(de man mimetypes):

ENVIRONMENT
       XDG_DATA_HOME
       XDG_DATA_DIRS
           These variables can list base directories to search for data files. The shared mime-info will be expected in the "mime" sub directory of one of these directories. If these are not set,
           there will be searched for the following directories:

                   $HOME/.local/share/mime
                   /usr/local/share/mime
                   /usr/share/mime

           See also the "XDG Base Directory Specification" http://freedesktop.org/Standards/basedir-spec <http://freedesktop.org/Standards/basedir-spec>

FILES
       The base dir for all data files is determined by two environment variables, see "ENVIRONMENT".

       BASE/mime/packages/SOURCE.xml
           All other files are compiled from these source files. To re-compile them use update-mime-database(1).

       BASE/mime/globs
           Compiled information about globs.

       BASE/mime/magic
           Compiled information about magic numbers.

       BASE/mime/MEDIA/SUBTYPE.xml
           Descriptions of a mimetype in multiple languages, used for the "--describe" switch.

Parece que estoy atrapado con el problema en Windows y Linux. Gracias por la explicación. Disculpas No puedo marcar 2 como la respuesta. Ambos fueron acertados.
scampbell

1

Me llevó un tiempo encontrarlo, pero pude instalar mimetype en Debian.

sudo apt-get install libfile-mimeinfo-perl

Ahora obtengo application/vnd.ms-excelun .xls en lugar de application/msword.


0

Mencionaste que lo estás haciendo en PHP. Encontré tales diferencias al obtener el tipo de archivo mime. Ellos difieren Para hacerlo correctamente en PHP, debe usar finfo

$finfo = new finfo();
$mime = $finfo->file($path_to_file, FILEINFO_MIME);

Gracias, ya estoy usando esta función. Devuelve el formato incorrecto. Es por eso que estaba probando.
scampbell

¿Qué formato devuelve?
llt

Ver pregunta original
scampbell

No mencionaste allí que usaste finfo. ¿Devuelve msword?
LLT
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.