2011-01-26 72 views
4

在PHP上傳中,我試圖驗證正在上傳的文件的MIME類型,以匹配該應用程序的一組有效MIME類型。當試圖使用fileinfo()來確定Office 2007文件的MIME類型時,它不會將其檢測爲適當的MIME類型。代替MIME類型響應是 「應用程序/壓縮」PHP 5.3.5 fileinfo()MS Office 2007文件的MIME類型 - magic.mime更新?

Office文檔MIME類型: http://filext.com/faq/office_mime_types.php

例PHP代碼:

$ oFileInfo =新FINFO(FILEINFO_MIME_TYPE);

$ sMimeType = $ oFileInfo - >文件($ _FILES [ 'Filedata上'] [ 'tmp_name的值']);

回聲$ sMimeType;

服務器設置信息:

  • 操作系統:Windows Server 2003 32位
  • Web服務器:IIS 6.0
  • PHP:使用FastCGI 5.3.5(線程安全)1.5
  • File:magic.mime
    • 作者:darko at uvcms點com 2008年4月16日09:35
      • 鏈接:php.net/manual/en/fileinfo.installation.php
    • 尺寸:517 KB
    • 來源:Source Forge的:GNU32 - 文件類型gnuwin32.sourceforge.net/packages/filetype。 HTM

我發現很多帖子來自一個網絡服務器下載時參考的問題與新的Office格式。在所有這些示例中,我沒有找到任何說明將新MIME類型添加到現有magic.mime文件的莊園,或者指向已包含Microsoft Office 2007+ MIME類型的magic.mime文件的鏈接。感謝你的協助。

回答

0
  1. 是的,你應該更新magic.mime
  2. 大拇哥不相信從瀏覽器發送的MIME類型($_FILES['Filedata']['type']
  3. 爲什麼你正在使用一個函數,該手冊說它已被棄用? http://php.net/manual/en/function.mime-content-type.php

注:finfo()確定MIME類型的文件由它的魔力字節;鑑於Office 2007文件(以及許多其他文件格式,例如ePUB)只是具有指定目錄結構的zip包,因此finfo()返回application/zip是合理的。

我建議解壓縮或列表的內容以檢查它的結構,如果你真的想基於它的內容確定的文件類型(和上傳時沒有MIME類型瀏覽器報告)

+0

使用「新finfo(FILEINFO_MIME_TYPE);」是目前(不推薦使用的莊園)嗎? mime_content_type()函數是我所理解的實際上不贊成的。 – Arachnid 2011-01-26 16:45:55

+0

對,我很困惑,對不起。 – timdream 2011-01-26 16:50:04

+0

這個問題當然是如何更新magic.mime文件的,有什麼線索呢? – Jorre 2011-06-02 12:29:40

0

你有沒有嘗試添加新的MIME類型爲IIS?

  1. 獲取互聯網管理單元
  2. 右鍵單擊「Web站點」,選擇「屬性」
  3. 選擇「HTTP頭」
  4. 選擇「MIME類型」
  5. 輸入新沒有領先期限的擴展和適當的MIME類型。根據需要爲每個分機重複。
  6. 單擊「確定」關閉所有對話框
1

較新的Office文件實際上是ZIP文件。這就是爲什麼MIME Magic數據庫將它們檢測爲ZIP文件的原因。您可能需要根據文件擴展名添加特殊規則,或者查看ZIP文件以查看它是否有docProps文件夾(Office ZIP歸檔文件具有包含有關文檔的元數據的文件夾)。

還有其他文件格式,實際上是具有不同擴展名的ZIP存檔,例如, JAR文件。

1
  1. 是的,你應該更新magic.mime。

笑,是啊,只是更新它,問題就解決了。 不幸的是,它看起來像神奇的MIME類型系統的實際文件內容的工作,並且由於文件被壓縮,它不能解壓(並看看哪個文件?)

有人建議寫一個函數例如解壓縮壓縮文件,然後檢查是否存在「DocProps」目錄。但是這會給生產服務器帶來另一種攻擊向量。