Comandi 'file --mime-type' e 'mimetype' che restituiscono risultati diversi


9

Ciao, sto cercando di capire perché PHP sta restituendo un tipo di file "msword" quando dovrebbe essere "eccellente", quindi ho testato sulla mia casella Ubuntu usando sia i comandi "file" che "mimetype". Come puoi vedere dai risultati seguenti, restituiscono risultati diversi. Qualcuno può spiegare perché?

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

Dovrei anche notare che il file in questione sta restituendo 'msword' su un server Windows. È stato generato utilizzando PHPExcel.

Grazie per l'aiuto.

Risposte:


7

fileottiene i suoi risultati da /etc/mime.types.

Da li:

application / mathematica-old
application / ms-tnef
application / msaccess mdb
punto doc applicazione / msword
application / news-Message-ID
application / news-trasmissione
application / ocsp-request
applicazione / ocsp-risposta

mimetype lo ottiene da ...

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 notare questa parte della pagina man per mimetype:

Per gli switch di denominazione ho seguito la manpage del file (1) versione 4.02 quando possibile. Sembrano differire completamente dalle specifiche nel capitolo "utility" di IEEE Std 1003.1-2001 (POSIX).

Quindi potresti chiamarlo un bug contro il file /etc/mime.typespoiché vnd.ms-excelè più preciso.


Sembra che io sia bloccato con il problema sia su Windows che su Linux. Grazie per la spiegazione.
scampbell

sì, a pensarci bene ... il mimetype è probabilmente solo desktop quindi quando hai a che fare con un server userai il file.
Rinzwind,

Sono su 12.04 e sembra che la modifica /etc/mime.typesnon influisca sui risultati di file.
congusbongus,

5

Esiste una differenza simile tra i due strumenti per i .debpacchetti.

E sembra che utilizza dei file /etc/mime.typese mimetypeutilizza una poltiglia molto complicata di più XDG_DATA_DIRS(da 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.

Sembra che io sia bloccato con il problema sia su Windows che su Linux. Grazie per la spiegazione. Mi scuso non posso contrassegnare 2 come la risposta. Entrambi erano esatti.
scampbell

1

Mi ci è voluto un po 'per trovarlo, ma sono stato in grado di installare il mimetype su debian.

sudo apt-get install libfile-mimeinfo-perl

Ora prendo application/vnd.ms-excelun .xls invece di application/msword.


0

Hai detto che lo stai facendo in PHP. Ho riscontrato tali differenze quando ho ottenuto il tipo di file mime. Differiscono. Per farlo correttamente in PHP, dovresti usare finfo

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

Grazie, sto già usando questa funzione. Restituisce il formato errato. Questo è il motivo per cui stavo testando.
scampbell

che formato restituisce?
LLT

Vedi domanda originale
scampbell

Non hai menzionato lì che hai usato finfo. Restituisce msword?
LLT
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.