8

用 PHP 检测文件的 MIME 类型很简单——只需使用 PEAR 的MIME_Type包、PHP 的fileinfofile -i在 Unix 机器上调用。这对于二进制文件和所有其他具有某种“魔术字节”的文件非常有效,通过这些文件可以轻松检测到它们。

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

  • CSS
  • 差异
  • INI(配置)
  • Javascript
  • 第一时间
  • SQL

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

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


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


如果我使用 ruby​​,我可以集成github 的 linguist。Ohloh 的ohcount是用 C 编写的,但是有一个命令行工具来检测类型:ohcount -d $file

我试过的

算了

正确检测 xml 和 php 文件,其他都没有。

阿帕奇蒂卡

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

4

4 回答 4

3

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

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

它在 github 上的代码,请参见https://github.com/cweiske/MIME_Type_PlainDetect。魔术文件位于data/programming.magic并且可以与file -f programming.magic /path/to/source

于 2012-05-25T11:02:34.643 回答
2

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

http://tika.apache.org/

于 2012-05-08T19:28:31.830 回答
2

如何 :

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

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

于 2012-05-08T20:06:18.480 回答
0

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

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

  • 解析 MIME 类型。
  • 支持完整的 RFC2045 规范。
  • 许多实用功能,用于处理和确定有关类型的信息。
  • 大多数函数都可以静态调用。
  • 自动检测文件的 mime 类型,可以使用 fileinfo 扩展名、mime_magic 扩展名、“file”命令或内置映射列表
于 2014-04-06T09:02:26.037 回答