Comandos 'file --mime-type' e 'mimetype' retornando resultados diferentes


9

Oi, eu estou tentando descobrir por que o PHP está retornando um tipo de arquivo 'msword' quando deveria ser 'excel', então testei na minha caixa do Ubuntu usando os comandos 'file' e 'mimetype'. Como você pode ver nos resultados abaixo, eles retornam resultados diferentes. Alguém pode explicar o porquê?

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

Devo também observar que o arquivo em questão está retornando 'msword' em um Windows Server. Foi gerado usando PHPExcel.

Obrigado pela ajuda.

Respostas:


7

fileobtém seus resultados /etc/mime.types.

De lá:

application / mathematica-old
application / ms-tnef
application / msaccess mdb
aplicativo / msword doc dot
application / news-message-id
aplicação / transmissão de notícias
application / ocsp-request
application / ocsp-response

mimetype recebe 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>

É importante notar que esta parte da página de manual do mimetype:

Para alternar nomes, segui a página de manual do arquivo (1) versão 4.02, quando possível. Eles parecem diferir completamente das especificações no capítulo 'utilitários' da IEEE Std 1003.1-2001 (POSIX).

Portanto, você pode chamá-lo de bug contra arquivo, /etc/mime.typespois vnd.ms-excelé mais preciso.


Parece que estou com o problema no Windows e no Linux. Obrigada pelo esclarecimento.
Scampbell

sim, e pensando nisso ... o mimetype provavelmente é apenas para desktop; ao lidar com um servidor, você usará o arquivo.
Rinzwind

Estou no 12.04 e parece que a edição /etc/mime.typesnão afeta os resultados de file.
congusbongus

5

Há uma diferença semelhante entre as duas ferramentas para .debpacotes.

Ele parece que os usos de arquivo /etc/mime.typese mimetypeusa um mingau muito complicada de mais 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 estou com o problema no Windows e no Linux. Obrigada pelo esclarecimento. Desculpas Não posso marcar 2 como a resposta. Ambos estavam no local.
scampbell

1

Demorei um pouco para encontrá-lo, mas eu consegui instalar o mimetype no debian.

sudo apt-get install libfile-mimeinfo-perl

Agora eu application/vnd.ms-excelcompro um .xls em vez de application/msword.


0

Você mencionou que está fazendo isso em PHP. Eu encontrei essas diferenças ao obter o tipo de arquivo MIME. Eles diferem. Para fazer isso corretamente no PHP, você deve usar o finfo

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

Obrigado, eu já estou usando esta função. Retorna o formato incorreto. É por isso que eu estava testando.
scampbell

que formato ele retorna?
LLT

Ver pergunta original
scampbell

Você não mencionou que usou o finfo. Retorna msword?
llt 23/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.