2010-02-27 49 views
4

我不是陌生人,但是這很奇怪。通常情況下,文本文件會被認爲是文本/純文本MIME,但現在,在實現fileinfo之後,此類文件現在被認爲是「text/x-pascal」。我有點擔心,因爲我需要確保在允許用戶上傳之前獲得正確的MIME類型。fileinfo和mime類型我從來沒有聽說過

有沒有一張備忘單,可以給我所有的「常見」啞劇,因爲它們被fileinfo解釋?


思南提供了一個鏈接,列出所有更常見的啞劇。如果你看看這個列表,你會發現.txt文件是文本/純文本MIME,但在我的情況下,純文本文件被解釋爲text/pascal。

回答

2

有一個圖表顯示了常見的MIME類型及其相應的擴展名列表。 Here

+0

非常感謝你思南。現在去那裏。 – Jim 2010-02-27 01:41:43

+0

在該鏈接上,例如,text/pascal與.pas擴展名關聯。在我的情況下,一個純文本文件被解釋爲文本/ pascal出於某種奇怪的原因。 – Jim 2010-02-27 01:43:26

4

fileinfo是「最佳猜測」。它只分析文件的一部分,以便弄清楚該文件是什麼類型,因此可以很容易地被愚弄。也許您的文件以Pascal評論或關鍵字開頭,例如ProjectUnit

3

Fileinfo的未使用的文件的擴展名來確定該MIME類型是,但quoting

這個模塊嘗試 中的函數猜測內容類型和編碼 的文件在該文件內的特定 位置處尋找特定的 魔術字節序列。

這個想法是,à該文件,其擴展的名稱,由用戶提供(特別是在的情況下,如你的,其中該文件被用戶上傳),並且如比文件本身的內容更「確定」。


也許一個解決方案可能是不檢查fileinfo返回的整個MIME類型,但只使用它的第一部分 - 至少在某些情況下?

舉例來說,你也許可以接受,都在text/*image/*家庭所有MIME類型,並拒絕所有那些看起來像application/*,除了application/pdf
(只是一個例子 - 但是你看到這一點)

3

我發現,由於至少5.03版本中,「file」命令可以在某些情況下,誤識別一個純文本文件作爲Pascal源文件,只是因爲它包含單詞「程序」或「記錄」。至少它看起來是如何檢查源代碼的(src/names.h)。我相信php fileinfo命令使用相同的'魔術'引擎,所以我懷疑這是問題的原因。如果/當我在文件郵件列表上被接受,我會通知維護者這個問題。

[UPDATE] 我問了這個問題,但沒有得到答覆。已經調查了這個問題更徹底,事實證明,identifying text formats is, in general, really difficult。如果你從文件中得到一個'text/*'MIME類型,你可能會考慮忽略結果並假設資源只是'text/plain',除非錯誤的否定(text/html也許)會給你帶來困難。