2010-02-06 65 views
6

起初我很疑惑,爲什麼我的文件沒有上傳給某些用戶,我發現每個人都沒有使用chrome,這是我測試的瀏覽器。爲什麼有一個MIME類型不一致與Firefox,鉻?

基本上我正在做一個文件檢查,以確保他們只能夠上傳MP3。

這是工作的鉻,但不是火狐。

if ($_FILES['uploaded']['type']=="audio/mp3") 

這是爲Firefox工作,但不是鉻。

$_FILES['uploaded']['type']=="audio/mpeg" 

任何人都可以解釋爲什麼會發生這種情況?我認爲這兩種瀏覽器都能夠理解其中的任何一種或...我還需要其他瀏覽器來擔心類似這些敏感的MIME類型嗎?

編輯:如果Pekka建議的是真實的,那麼檢查某個MIME類型的最佳方法是什麼?

+0

重新編輯:查看我編輯的答案。 – 2010-02-06 22:38:41

+0

泰克,你確定「這是鉻,但不是火狐。音頻/ MP3」?因爲在目前的瀏覽器版本中,我看到了反向 - 音頻/ mp3在Firefox中的作品,但不是Chrome。 – ChrisJJ 2013-01-10 12:36:51

回答

5

根據w3schoolsaudio/mpeg是正確的類型。但是沒關係,MIME類型可能會有所不同,在檢查文件時絕對不能依賴它們。不一致是規則,並且是可以預料的。

要識別MP3文件,也許getid3包可以幫助你:

getID3()是從提取的MP3 &其他多媒體文件格式的有用信息的PHP腳本。

編輯: IANA擁有MIME類型here的正式名單。那裏沒有提及mp3,所以這是Chrome的一部分。

編輯2:你最好在服務器端確定文件的MIME類型是finfo擴展名。它試圖通過「內容嗅探」來確定文件的類型,在數據的前幾個字節中查找某些文件類型的特定特徵。在這個過程中,MIME類型也可能有所不同,但至少它們在同一臺服務器上是一致的,所以你不會再有瀏覽器問題了。

+1

像Pekka指出,fileinfo擴展是測試MIME類型的唯一理智方式。我只想指出,你根本不能相信文件數組類型。它來自客戶端,修改起來微不足道。這不是傻瓜證明,但比瀏覽器發送的更好。 – 2010-02-06 23:14:13

3

每個瀏覽器可以實現W3C標準略有不同,這讓所有的開發人員懊惱(#rant)...

依託由用戶生成的元信息/瀏覽器是非常不可靠,不推薦。如果這是您唯一的安全/健全機制,那麼有人希望對您的系統造成危害,可以通過自定義的請求==「audio/mpeg」手動輸入元類型字段,然後上傳任何類型的可執行文件。如果您確實想確保在服務器端上傳數據之前必須全面檢查服務器端的數據,然後再將其接收到永久性存儲/生產系統中。或者在一個不太危險的筆記上..一個用戶使用不同的瀏覽器,你以前沒有測試過可能想要上傳一個合法的MP3文件,但它可能不會宣佈其MIME類型爲音頻/ MPEG或音頻/ MP3,然後你會拒絕他們訪問到系統...

-2

音頻標籤

<audio controls="controls" autoplay="true"> 
         <source id="webm" src="Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.ogg" type="audio/ogg" /> 
         <source id="webm" src="Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.mp3" type="audio/mp3" /> 
         <source id="webm" src="Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.webm" type="audio/webm" /> 
         <!--[if lt IE 9]> 
         <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="150" height="38" id="niftyPlayer1" align="right"> 
         <param name=movie value="niftyplayer.swf?file=Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.mp3&as=1"> 
         <param name=quality value=high> 
         <param name=bgcolor value=#471313> 
         <embed src="niftyplayer.swf?file=Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.mp3&as=1" quality=high bgcolor=#471313 width="150" height="38" name="niftyPlayer1" align="right" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> 
         </embed> 
         </object> 
         <!--<![endif]--> 
        </audio> 

視頻標籤

<video width="400" height="300" controls="controls" poster="img/poster.png" > 
      <source id="3gp" src="wedding1.3gp" type="video/3gp" /> 
      <source id="mp4" src="perfectparties/weddingDroid.mp4" type="video/mp4" /> 
      <source id="webm" src="wedding1.webm" type="video/webm" /> 
      <source id="mp4" src="perfectparties/wedding1.mp4" type="video/mp4" /> 
      <source id="ogv" src="perfectparties/wedding1.ogv" type="video/ogv" /> 

      <!--[if lt IE 9]> 
      <object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="400" height="300"> 
       <param name="autoplay" value="false"> 
       <param name="movie" value="wedding1.swf"> 
       <param name="quality" value="high"> 
       <param name="wmode" value="opaque"> 
       <param name="swfversion" value="6.0.65.0"> 
       <param name="expressinstall" value="Scripts/expressInstall.swf"> 
       </object> 
       <!--<![endif]--> 
</video> 


<script type="text/javascript"> 
swfobject.registerObject("FlashID"); 
</script> 

它需要通過所有格式的工作...

最重要的確保您的系統管理員允許MIME類型;適用在服務器/根/域上。這是最大的不一致,但這適用於包括IE在內的所有瀏覽器。

+0

問題在於討論文件上傳,而不是媒體元素。 – Quentin 2014-06-16 09:04:53

相關問題