Команды 'file --mime-type' и 'mimetype', возвращающие разные результаты
Привет, я пытаюсь понять, почему PHP возвращает тип файла "msword", когда он должен быть "excel", поэтому проверил на моем Ubuntu box, используя команды "file" и "mimetype". Как видно из приведенных ниже результатов, они дают разные результаты. Кто-нибудь может объяснить, почему?
root@dev:~# file --mime-type 1.xls
1.xls: application/msword
root@dev:~# mimetype 1.xls
1.xls: application/vnd.ms-excel
Я также должен отметить, что рассматриваемый файл возвращает "msword" на Windows Server. Он был создан с использованием PHPExcel.
Спасибо за вашу помощь.
4 ответа
file
получает свои результаты от /etc/mime.types
,
Оттуда:
применение / Mathematica давности Применение / мс-TNEF приложение / msaccess mdb приложение / msword doc точка Приложение / Новости-сообщение-идентификатор Применение / Новости-передачи Приложение / OCSP-запрос Применение / OCSP-ответ
mimetype получает его от...
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>
Стоит отметить, что эта часть на странице руководства для mimetype:
Для обозначения переключателей я следовал руководству по файлу (1) версии 4.02, когда это было возможно. Похоже, они полностью отличаются от спецификации в главе "Утилиты" IEEE Std 1003.1-2001 (POSIX).
Так что вы можете назвать это ошибкой в файле /etc/mime.types
поскольку vnd.ms-excel
точнее
Существует сходная разница между двумя инструментами для .deb
пакеты.
Похоже, что файл использует /etc/mime.types
а также mimetype
использует гораздо сложнее месиво из более XDG_DATA_DIRS
(от 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.
Мне потребовалось некоторое время, чтобы найти его, но я смог установить mimetype на Debian.
sudo apt-get install libfile-mimeinfo-perl
Теперь я получаю application/vnd.ms-excel
для.xls вместо application/msword
,
Вы упоминали, что делаете это на PHP. Я сталкивался с такими различиями при получении файла MIME. Они отличаются. Чтобы правильно сделать это в PHP, вы должны использовать finfo
$finfo = new finfo();
$mime = $finfo->file($path_to_file, FILEINFO_MIME);