Polecenia „file --mime-type” i „mimetype” zwracają różne wyniki


9

Cześć Próbuję dowiedzieć się, dlaczego PHP zwraca typ pliku „msword”, gdy powinien być „excel”, więc przetestowałem na moim Ubuntu box, używając zarówno poleceń „file”, jak i „mimetype”. Jak widać z poniższych wyników, zwracają różne wyniki. Czy ktoś może wyjaśnić, dlaczego?

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

Powinienem również zauważyć, że ten plik zwraca „msword” na Windows Server. Został wygenerowany przy użyciu PHPExcel.

Dzięki za pomoc.

Odpowiedzi:


7

filepobiera wyniki od /etc/mime.types.

Stamtąd:

Aplikacja / matematyka
application / ms-tnef
application / msaccess mdb
application / msword doc dot
application / news-message-id
podanie / transmisja wiadomości
wniosek / wniosek ocsp
application / ocsp-response

mimetype pobiera go od ...

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>

Warto zauważyć, że ta część strony podręcznika dla mimetype:

W przypadku przełączników nazewnictwa śledziłem stronę podręcznika pliku (1) w wersji 4.02, jeśli to możliwe. Wydaje się, że całkowicie różnią się od specyfikacji w rozdziale „Narzędzia” IEEE Std 1003.1-2001 (POSIX).

Możesz więc nazwać to błędem w stosunku do pliku, /etc/mime.typesponieważ vnd.ms-exceljest bardziej dokładny.


Wygląda na to, że utknąłem z problemem, zarówno w systemie Windows, jak i Linux. Dziękuję za wyjaśnienie.
scampbell

tak i myśląc o tym ... mimetype jest prawdopodobnie tylko na komputery, więc kiedy masz do czynienia z serwerem, będziesz używał pliku.
Rinzwind 11.04.13

Mam 12.04 i wygląda na to, że edycja /etc/mime.typesnie wpływa na wyniki file.
congusbongus,

5

Istnieje podobna różnica między dwoma narzędziami do .debpakietów.

To wydaje się , który używa plików /etc/mime.typesi mimetypewykorzystuje wiele bardziej skomplikowany papkę z XDG_DATA_DIRS(od 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.

Wygląda na to, że utknąłem z problemem, zarówno w systemie Windows, jak i Linux. Dziękuję za wyjaśnienie. Przepraszam, nie mogę oznaczyć 2 jako odpowiedzi. Oba były na miejscu.
scampbell 11.04.13

1

Znalezienie go zajęło mi trochę czasu, ale udało mi się zainstalować typ MIME na Debianie.

sudo apt-get install libfile-mimeinfo-perl

Teraz dostaję application/vnd.ms-excel.xls zamiast application/msword.


0

Wspomniałeś, że robisz to w PHP. Napotkałem takie różnice podczas pobierania pliku typu MIME. Różnią się. Aby poprawnie to zrobić w PHP, powinieneś użyć finfo

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

Dzięki, już korzystam z tej funkcji. Zwraca niepoprawny format. Właśnie dlatego testowałem.
scampbell

jaki format zwraca?
LLT

Zobacz oryginalne pytanie
scampbell

Nie wspomniałeś, że użyłeś finfo. Czy zwraca msword?
2013
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.