php 文件的 'file --mime-type' 与 'mimetype'

php 文件的 'file --mime-type' 与 'mimetype'

我试图理解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

相关内容