Commandes «file --mime-type» et «mimetype» retournant des résultats différents


9

Salut, j'essaie de comprendre pourquoi PHP renvoie un type de fichier «msword» alors qu'il devrait être «excel», alors j'ai testé sur ma boîte Ubuntu en utilisant à la fois les commandes «file» et «mimetype». Comme vous pouvez le voir sur les résultats ci-dessous, ils renvoient des résultats différents. Quelqu'un peut-il expliquer pourquoi?

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

Je dois également noter que le fichier en question renvoie «msword» sur un serveur Windows. Il a été généré à l'aide de PHPExcel.

Merci de votre aide.

Réponses:


7

fileobtient ses résultats /etc/mime.types.

De là:

application / mathématique
application / ms-tnef
application / msaccess mdb
application / msword doc dot
application / news-message-id
application / transmission de nouvelles
application / ocsp-request
application / ocsp-response

mimetype l' obtient 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>

Il convient de noter cette partie de la page de manuel pour mimetype:

Pour nommer les commutateurs, j'ai suivi la page de manuel de file (1) version 4.02 lorsque cela était possible. Ils semblent différer complètement de la spécification du chapitre «utilitaires» de IEEE Std 1003.1-2001 (POSIX).

Donc, vous pourriez l'appeler un bug contre un fichier /etc/mime.typescar il vnd.ms-excelest plus précis.


On dirait que je suis coincé avec le problème sur Windows et Linux. Merci pour l'explication.
scampbell

oui et en y réfléchissant ... mimetype est probablement un ordinateur de bureau uniquement, donc lorsque vous traitez avec un serveur, vous allez utiliser un fichier.
Rinzwind

Je suis le 12.04 et il semble que l'édition /etc/mime.typesn'affecte pas les résultats de file.
congusbongus

5

Il existe une différence similaire entre les deux outils pour les .debpackages.

Il semble que le fichier utilise /etc/mime.typeset mimetypeutilise une bouillie beaucoup plus compliquée 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.

On dirait que je suis coincé avec le problème sur Windows et Linux. Merci pour l'explication. Toutes mes excuses, je ne peux pas marquer 2 comme réponse. Les deux étaient parfaits.
scampbell

1

Il m'a fallu un certain temps pour le trouver, mais j'ai pu installer mimetype sur debian.

sudo apt-get install libfile-mimeinfo-perl

Maintenant, j'obtiens application/vnd.ms-excelun .xls au lieu de application/msword.


0

Vous avez mentionné que vous le faites en PHP. J'ai rencontré de telles différences lors de l'obtention du type de fichier MIME. Ils diffèrent. Pour le faire correctement en PHP, vous devez utiliser finfo

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

Merci, j'utilise déjà cette fonction. Il renvoie le format incorrect. C'est pourquoi je testais.
scampbell

quel format retourne-t-il?
llt

Voir la question d'origine
scampbell

Vous n'avez pas mentionné que vous utilisiez finfo. Renvoie-t-il msword?
llt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.