如何检测纯文本文件的MIME类型:CSS,Javascript,ini,sql


How to detect MIME type of plain text files: CSS, Javascript, ini, sql?

用PHP检测文件的MIME类型是微不足道的 - 只需使用PEAR的MIME_Type包,PHP的fileinfo或在Unix机器上调用file -i即可。这非常适用于二进制文件和所有其他具有某种"魔术字节"的文件,通过它们可以轻松检测到它们。

我失败的是检测正确的 MIME 类型的纯文本文件:

  • .CSS
  • 差异
  • INI (配置(
  • 爪哇语
  • rST
  • .SQL

所有这些都被标识为"文本/纯文本",这是正确的,但对我来说太不具体了。我需要真正的类型,即使分析文件内容需要一些时间。

所以我的问题:有哪些解决方案可以检测此类纯文本文件的 MIME 类型?有图书馆吗?代码片段?


请注意,我既没有文件名也没有文件扩展名,但我有文件内容。


如果我使用 ruby,我可以整合 github 的语言学家。Ohloh的ohcount是用C语言编写的,但有一个命令行工具来检测类型:ohcount -d $file

我尝试过什么

哦计数

正确检测 xml 和 php 文件,所有其他文件则不能。

Apache tika

检测xml和html,所有其他测试文件仅被视为text/plain

由于我没有找到合适的库,我编写了自己的魔术文件来正确检测我的所有测试文件。

我的应用程序首先尝试使用自定义魔术文件进行检测,如果未检测到类型,则回退到正常/系统魔术文件。

在 github 上编写代码,请参见 https://github.com/cweiske/MIME_Type_PlainDetect 。魔术文件位于data/programming.magic,可以与file -f programming.magic /path/to/source一起使用

我认为Apache Tika的魔法检测可以帮助你:

http://tika.apache.org/

如何:

  • .ini 要检查 ini 文件,您将使用parse_ini_file函数。如果 ini 文件错误,则返回 false。
  • .css 首先检查您是否找到类似的东西 body {html {body, html { .您也可以尝试CSS中的关键字,例如font-familybackgroundborder等。
  • .sql 您可能会找到类似 INSERT INTOUPDATE (.*) SETCREATE TABLE 等,再次查找关键字。
  • .js 对于 Javascript,您将不得不再次找到解析关键字的所有内容......

对于其他人,我不认识他们。

我找到了这个库: http://pear.php.net/package/MIME_Type/

根据其描述,它"提供处理MIME类型的功能",并提供以下功能:

  • 分析 MIME 类型。
  • 支持完整的RFC2045规范。
  • 许多用于处理和确定有关类型的信息的实用工具函数。
  • 大多数函数都可以静态调用。
  • 自动检测文件的 mime 类型,包括文件信息扩展名、mime_magic扩展名、"file"命令或内置映射列表