Perintah 'file --mime-type' dan 'mimetype' Mengembalikan Hasil Berbeda

9

Hai Saya mencoba mencari tahu mengapa PHP mengembalikan tipe file 'msword' padahal seharusnya 'excel' jadi telah diuji pada kotak Ubuntu saya menggunakan perintah 'file' dan 'mimetype'. Seperti yang Anda lihat dari hasil di bawah ini, hasilnya berbeda. Adakah yang bisa menjelaskan mengapa?

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

Saya juga harus mencatat file yang dimaksud mengembalikan 'msword' pada Windows Server. Itu dihasilkan menggunakan PHPExcel.

Terima kasih atas bantuan Anda.

scampbell
sumber

Jawaban:

7

filemendapat hasilnya dari /etc/mime.types.

Dari sana:

aplikasi / mathatica-old
application / ms-tnef
application / msaccess mdb
aplikasi / msword doc dot
aplikasi / berita-pesan-id
aplikasi / transmisi berita
application / ocsp-request
application / ocsp-response

mimetype mendapatkannya dari ...

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>

Yang perlu diperhatikan adalah bagian ini di halaman manual untuk mimetype:

Untuk penamaan switch saya mengikuti manual file (1) versi 4.02 bila memungkinkan. Mereka tampaknya sangat berbeda dari spesifikasi di bab 'utilities' dari IEEE Std 1003.1-2001 (POSIX).

Jadi, Anda mungkin menyebutnya bug terhadap file /etc/mime.typeskarena vnd.ms-excellebih akurat.

Rinzwind
sumber
Sepertinya saya terjebak dengan masalah pada Windows dan Linux. Terima kasih untuk penjelasannya.
scampbell
ya dan memikirkannya ... mimetype mungkin hanya desktop jadi ketika berhadapan dengan server Anda akan menggunakan file.
Rinzwind
Saya pada 12,04 dan tampaknya pengeditan /etc/mime.typestidak mempengaruhi hasil file.
congusbongus
5

Ada perbedaan yang sama antara dua alat untuk .debpaket.

Ini muncul bahwa penggunaan berkas /etc/mime.typesdan mimetypemenggunakan bubur rumit banyak lebih XDG_DATA_DIRS(dari 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.
Oli
sumber
Sepertinya saya terjebak dengan masalah pada Windows dan Linux. Terima kasih untuk penjelasannya. Maaf saya tidak bisa menandai 2 sebagai anwser. Keduanya tepat.
scampbell
1

Butuh beberapa saat untuk menemukannya, tetapi saya dapat menginstal mimetype di debian.

sudo apt-get install libfile-mimeinfo-perl

Sekarang saya mendapatkan application/vnd.ms-excel.xls bukan application/msword.

Menandai
sumber
0

Anda menyebutkan Anda melakukannya dalam PHP. Saya menemukan perbedaan seperti itu ketika mendapatkan jenis file mime. Mereka memang berbeda. Untuk melakukannya dengan benar di PHP, Anda harus menggunakan finfo

$finfo = new finfo();
$mime = $finfo->file($path_to_file, FILEINFO_MIME);
llt
sumber
Terima kasih saya sudah menggunakan fungsi ini. Ini mengembalikan format yang salah. Inilah sebabnya saya menguji.
scampbell
format apa yang dikembalikan?
llt
Lihat pertanyaan asli
scampbell
Anda tidak menyebutkan di sana Anda menggunakan finfo. Apakah itu mengembalikan msword?
llt