2012-02-26 67 views
1

我有一個文件上傳,它在除firefox以外的任何地方都很棒,它一直說mimetype不支持。這是我的代碼:mp3上傳mimetype被firefox特意丟失

if(isset($_POST[submitfile])) 
{ 
    $uploadedsong = $_FILES['soup']['tmp_name']; 
      $mimetype = $_FILES['soup']['type']; 
       if($mimetype=="audio/mpeg"||$mimetype=="audio/x-mpeg-3"||$mimetype=="audio/mp3"||$mimetype=="audio/x-mpeg"||$mimetype=="audio/x-mp3"||$mimetype=="audio/mpeg3"||$mimetype=="audio/x-mpeg3"||$mimetype=="audio/mpg"||$mimetype=="audio/x-mpg"||$mimetype=="audio/x-mpegaudio") 
       { 

這是允許上傳爲每個瀏覽器,除了Firefox!非常沮喪,我不知道爲什麼會發生這種情況。有任何想法嗎?

+0

哪一個是給Firefox來嗎? – hakre 2012-02-26 02:20:58

+0

其火狐10.0.2 – JimmyBanks 2012-02-26 02:22:17

+0

不是版本,而是MIME類型。 – hakre 2012-02-26 02:22:55

回答

2

文件上傳的MIME類型完全是信息性的,並沒有進一步明確地(具體地)對什麼是永久性的綁定。不要依賴它。

Firefox是沒有做錯什麼在這裏,它就是你的編碼到腳本錯誤的期望 - 從PHP Manual­Docs

$_FILES['userfile']['type']

文件的MIME類型,如果瀏覽器提供了這個信息。一個例子就是「image/gif」。然而,這種MIME類型在PHP方面沒有被檢查,因此不會將其值視爲理所當然。

所以這個信息的使用是有限的,它並不嚴格。

您應該記錄上傳了哪種MIME類型,因爲您無法針對所有瀏覽器/操作系統組合進行測試。

檢查文件也是必要的,以及如果你想確保它遵循一個MP3文件的約定。在fileinfo­Docs(這是所有文件)旁邊,有php-readerZend_Mimme_Magic以及很多其他mp3文件相關的庫。

+0

即時通訊不太清楚你的意思,即時通訊使用MIME類型進行驗證,我剝離擴展名並將其重命名爲.mp3,這是不好的做法?我應該怎麼去上傳呢? – JimmyBanks 2012-02-26 02:23:42

+0

然後看看Firefox發送給腳本的MIME類型(內容類型)字符串,並檢查它是否在列表中丟失。從技術上講,任何瀏覽器都可以向你發送任何類型的內容類型(包括'application/octet-stream',這意味着二進制文件) - 無論文件是什麼。如果用戶選擇要上傳的文件,瀏覽器不會驗證任何內容。它通常只會添加底層操作系統提供的有關文件的信息。 – hakre 2012-02-26 02:31:51

+0

哦好吧,謝謝你的解釋,所以它不可靠,當然。 – JimmyBanks 2012-02-26 07:18:36

1

嘗試使用它來獲取MIME類型

$file_info = new finfo(FILEINFO_MIME); $mime_type = $file_info->file($file);

+0

當我嘗試使用這個函數時,我得到「class'finfo' – JimmyBanks 2012-02-26 03:16:41

+0

你需要安裝這個文件的擴展名來安裝或升級到php 5.3 – Alex 2012-02-26 03:43:44