我从未听说过的fileinfo和mime类型

时间:2010-02-27 01:35:46

标签: php fileinfo

我对mime类型并不陌生,但这很奇怪。通常,文本文件可能被认为是text / plain mime,但是现在,在实现fileinfo之后,这种类型的文件现在被认为是“text / x-pascal”。我有点担心,因为我需要确保在允许用户上传之前我获得了正确的mime类型。

是否有一个备忘单会给我所有的“常见”哑剧,因为它们是由fileinfo解释的?


Sinan提供了一个列出所有更常见的哑剧的链接。如果查看此列表,您将看到.txt文件是text / plain mime,但在我的情况下,一个普通文本文件被解释为text / pascal。

4 个答案:

答案 0 :(得分:4)

fileinfo是“最佳猜测”。它只分析文件的一部分,以便试图找出文件的类型,因此它可以很容易被愚弄。也许您的文件以Pascal评论或关键字开头,例如ProjectUnit

答案 1 :(得分:3)

Fileinfo没有使用文件的扩展名来确定它是哪种mime类型,而是quoting

  

此模块中的功能尝试   猜猜内容类型和编码   通过寻找确定的文件   特定的魔术字节序列   位置在文件中。

该想法是文件的名称à及其扩展名由用户提供(特别是在诸如您的用户上传文件的情况下),以及因此,它不如文件本身的内容“确定”。


也许解决方案可能是不检查fileinfo返回的整个mime类型,而只是使用它的第一部分 - 至少在某些情况下?

例如,您可以接受text/*image/*个系列中的所有mimetype,并拒绝application/*以外的所有mimetype,application/pdf除外?
(只是一个例子 - 但你明白了这一点)

答案 2 :(得分:3)

我发现,至少从版本5.03开始,'file'命令在某些情况下会错误地将纯文本文件识别为Pascal源文件,因为它包含单词'program'或'记录'。至少它是如何检查源(src / names.h)。我相信php fileinfo命令使用相同的“魔术”引擎,所以我怀疑这是问题的原因。如果/当我在文件邮件列表中被接受时,我将通知维护者此问题。

<强> [UPDATE] 我问了这个问题,但没有采取任何回应。仔细研究过这个问题后,事实证明identifying text formats is, in general, really difficult。如果从文件中获得“text / *”MIME类型,您可能需要考虑忽略结果并假设资源只是“text / plain”,除非错误否定(text / html)可能会给您带来困难。

答案 3 :(得分:2)

有一个图表显示了常见MIME类型及其相应扩展名列表。 Here