我试图理解file --mime-type
和之间的区别mimetype
。对于这个简单的 php 文件,它们在 Ubuntu 12.04.4 LTS 上给出了不同的结果。
<?php
echo 'Hello world!';
?>
现在,当我使用 mimetype 和 file 来获取文件的类型时,我得到:
$ mimetype -b test.php
application/x-php
$ file -b --mime-type test.php
test/x-php
这个问题 ('file --mime-type' 和 'mimetype' 命令返回不同的结果) 表示file
使用/etc/mime.types
但是:
$ grep php /etc/mime.types
application/x-httpd-php phtml pht php
application/x-httpd-php-source phps
application/x-httpd-php3 php3
application/x-httpd-php3-preprocessed php3p
application/x-httpd-php4 php4
application/x-httpd-php5 php5
我最好奇的是为什么file
会将其视为文本文件。这导致我在 Rails 中遇到问题,因为 Ruby 的 MIME 类型也将其视为类型应用程序。
答案1
根据手册页 file
但不使用/etc/mime.types
来自的编译定义/usr/share/misc/magic.mgc
、来自的纯文本定义/etc/magic
和一些其他文件。
/usr/share/misc/magic.mgc
您可以从包的源代码中获取源代码file
(查看magic/
子文件夹)。
如果要file
返回,application/x-php
请将以下内容添加到/etc/magic
:
# PHP scripts
# Ulf Harnhammar <[email protected]>
0 search/1/c =<?php PHP script text
!:mime application/x-php
0 search/1 =<?\n PHP script text
!:mime application/x-php
0 search/1 =<?\r PHP script text
!:mime application/x-php
0 search/1/w #!\ /usr/local/bin/php PHP script text executable
!:mime application/x-php
0 search/1/w #!\ /usr/bin/php PHP script text executable
!:mime application/x-php
# Smarty compiled template, http://www.smarty.net/
# Elan Ruusamäe <[email protected]>
0 string =<?php\ /*\ Smarty\ version Smarty compiled template
>24 regex [0-9.]+ \b, version %s
!:mime application/x-php