Befehle 'file --mime-type' und 'mimetype', die unterschiedliche Ergebnisse zurückgeben


9

Hallo, ich versuche herauszufinden, warum PHP einen Dateityp 'msword' zurückgibt, wenn er 'excel' sein sollte. Habe also auf meiner Ubuntu-Box sowohl mit den Befehlen 'file' als auch 'mimetype' getestet. Wie Sie den Ergebnissen unten entnehmen können, geben sie unterschiedliche Ergebnisse zurück. Kann jemand erklären warum?

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

Ich sollte auch beachten, dass die fragliche Datei 'msword' auf einem Windows Server zurückgibt. Es wurde mit PHPExcel generiert.

Danke für Ihre Hilfe.

Antworten:


7

fileerhält seine Ergebnisse von /etc/mime.types.

Von dort:

Anwendung / Mathematica-alt
application / ms-tnef
application / msaccess mdb
application / msword doc dot
Anwendung / News-Message-ID
Bewerbung / Nachrichtenübertragung
Anwendung / OCP-Anfrage
application / ocsp-antwort

Mimetyp bekommt es von ...

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>

Bemerkenswert ist dieser Teil in der Manpage für Mimetyp:

Für die Benennung von Schaltern habe ich mich nach Möglichkeit an die Manpage von Datei (1) Version 4.02 gehalten. Sie scheinen sich vollständig von den Spezifikationen im Kapitel "Dienstprogramme" von IEEE Std 1003.1-2001 (POSIX) zu unterscheiden.

Sie können es also als Fehler gegen Dateien bezeichnen, /etc/mime.typesda dies vnd.ms-excelgenauer ist.


Es sieht so aus, als ob ich dann unter Windows und Linux mit dem Problem festgefahren bin. Danke für die Erklärung.
Scampbell

Ja, und darüber nachzudenken ... Mimetyp ist wahrscheinlich nur Desktop. Wenn Sie also mit einem Server arbeiten, werden Sie eine Datei verwenden.
Rinzwind

Ich bin am 12.04 und es scheint, dass die Bearbeitung /etc/mime.typesdie Ergebnisse von nicht beeinflusst file.
Congusbongus

5

Es gibt einen ähnlichen Unterschied zwischen den beiden Tools für .debPakete.

Es scheint, dass die Datei einen viel komplizierteren Brei von mehr (von ) verwendet /etc/mime.typesund mimetypeverwendet :XDG_DATA_DIRSman 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.

Es sieht so aus, als ob ich dann unter Windows und Linux mit dem Problem festgefahren bin. Danke für die Erklärung. Entschuldigung, ich kann 2 nicht als Antwort markieren. Beide waren genau richtig.
Scampbell

1

Ich habe eine Weile gebraucht, um es zu finden, aber ich konnte mimetype auf debian installieren.

sudo apt-get install libfile-mimeinfo-perl

Jetzt bekomme ich application/vnd.ms-excelfür eine .xls statt application/msword.


0

Sie haben erwähnt, dass Sie es in PHP tun. Ich habe solche Unterschiede festgestellt, als ich den MIME-Dateityp erhalten habe. Sie unterscheiden sich. Um dies in PHP richtig zu machen, sollten Sie finfo verwenden

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

Danke, ich benutze diese Funktion bereits. Es wird das falsche Format zurückgegeben. Deshalb habe ich getestet.
Scampbell

Welches Format wird zurückgegeben?
22.

Siehe Originalfrage
Scampbell

Sie haben dort nicht erwähnt, dass Sie Finfo verwendet haben. Gibt es msword zurück?
llt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.