2011-11-09 78 views
1

我想我最終建立一個腳本,強制瀏覽器在某種意義上提示下載,而不是直接轉到該文件,我想基於數據庫條目來做,所以它只是混淆了一點點更多。我的問題是我只能找到一個MIME類型或2個工作,但我想要一個公平的股票價值。從文檔到PDF,到MP3到AVI ..我的腳本將基於文件的擴展運行,然後輸出適當的頭只需要知道什麼類型的文件頭。默認情況下,是否有已知的在瀏覽器中流式傳輸或打開的文件類型的公共列表?是否有完整的MIME類型/頭文件列表?

+0

有一個.NET框架的替代方案:http://stackoverflow.com/questions/3937958/how-can-i-query-iis-for-mime-type-mappings(仍在尋找PHP + Apache解決方案) – Raptor

+0

我很欣賞通過.NET提供的解決方案,不幸的是,我正在構建的應用程序是用PHP開發的。但是,好的電話都不會少,當談到在一個類似的需求的.NET網站上工作時,必須記住這一點 – chris

回答

4

文件擴展名不完全是確定文件類型的最可靠的方法。你可能有興趣做一些MIME猜測。如果你的應用程序在Linux的主機,你可以從與-i選項file命令行工具中受益:

// Use escapeshellarg() to inject arbitrary file paths 
$content_type = `file -i /path/to/file`; 

否則,PHP有一個PECL擴展名爲Fileinfo

如果你想堅持文件擴展名,media types are approved by the IANA

更新: Fileinfo的是,因爲PHP/5.3.0原生擴展(因此無需安裝第三方應用程序)。使用示例:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mime_type = finfo_file($finfo, '/path/to/file'); 
finfo_close($finfo); 
+0

我知道我可以很快測試這個。希望(我知道godaddy有它的約束份額)但是我還沒有準備好做到這一點,$ mime_type會是application/blah的平等,我會把它轉換成頭文件嗎? – chris

+1

@chris - 的確如此。 –

+0

很酷,謝謝。 – chris

1

太長的評論。所以我把它作爲答案。

測試MIME類型支持

螢火蟲可用於檢查什麼標頭的Apache返回不同​​ 圖像和電影類型。爲此,只需嘗試在HTML中加載所需的 文件。打開Firebug並轉到「Net」 - >「Headers」 - >「Response Headers」。內容類型應該出現在那裏。如果Apache不識別圖像/電影,則 可能會返回爲「text/plain」。如果Apache確實能夠識別該資源,則應該看到正確的MIME類型,例如 。 「視頻/ WEBM」。請注意,如果您在請求狀態旁邊看到 「304未修改」,則從緩存中取出資源 ,並且HTTP標頭可能不會反映您對Apache配置所做的任何 更改。您可以使用「控制 + F5」強制Firefox重新獲取所有緩存的項目。

從上面的提示中,您可以通過解析服務器響應來測試Web服務器的內容類型響應。如果返回text/plain,則表示不支持MIME。