2010-05-20 99 views
8

在PHP中有什麼樣的方式來獲得MIME類型?PHP,如何獲得Mime類型 - 任務不可能?

我已經被廣泛地尋找過去的幾個小時,好像有三種主要方式,其每路有問題:

  1. mime_content_type() 這已經過時,時代的很多未安裝,如果安裝有時不會找到mime.magic文件。

  2. file_info 沒有安裝在我試過的主機上,似乎沒有很好的支持。是擴展名(PECL)。

  3. shell_exec(文件-ib。$文件) 不適用於Windows服務器。我在linux服務器上試過它,它給了我一個php文件的「image/x-3ds2」。這他媽到底是什麼!!!

什麼是獲得mime文件類型的好方法?

+0

的可能重複[我要如何找到MIME類型的PHP文件的?](http://stackoverflow.com/ question/134833/how-do-i-find-the-mime-a-file-with-php) – 2010-05-20 07:07:54

+0

呃,我很迷惑。我實際上閱讀了這篇文章,但我無法找到任何好的答案,我的意思是,我找不到任何可接受的答案,這是否意味着,如果沒有絕對答案,我今後不能發佈任何類似的問題?什麼是SO規則?我想知道,所以我可以按照=) – mysqllearner 2010-05-20 07:13:34

+0

而我認爲這篇文章(http://stackoverflow.com/questions/134833/how-do-i-find-the-mime-type-of-a-file -with-php)在1年前被問到,我懷疑是否會有任何新的答案=( – mysqllearner 2010-05-20 07:15:23

回答

2

至於解決方法,你可以使用來自http://upgradephp.berlios.de/ 了「mime.php」擴展它模擬mime_content_type()如果不可用。專門爲這種情況製作。

您可以安裝您的私人mime.magic文件,並強制它與ini_set(「mime_magic.magicfile」)。無論如何,建議您這樣做,以便您可以使用所需的設置。

+0

mime.php是未完成的,我只是測試它,它不工作:( – 2012-04-26 17:48:28

0

Chris Jean開發了a function called get_file_mime_type,首先嚐試使用finfo_open方法,然後回落到mime_content_type,然後最終回退到簡單的extension => mime_type陣列。當我的服務器上前兩個選項不可用時,它適用於我。節拍必須自己寫這個功能!

0

您可以使用magic numbers,查閱其他文件簽名列表(like this one here),然後檢查第一個字節的二進制數據。

function getfiletype($file) { 
    $handle = @fopen($file, 'r'); 
    if (!$handle) 
     throw new Exception('File error - Can not open File or file missing'); 

    $types = array('jpeg' => "\xFF\xD8\xFF", 
        'gif' => 'GIF', 
        'bmp' => 'BM', 
        'tiff' => '\x49\x20\x49', 
        'png' => "\x89\x50\x4e\x47\x0d\x0a", 
        'psd' => '8BPS', 
        'swf' => 'FWS'); 

    $bytes = fgets($handle, 8); 
    $filetype = 'other'; 

    foreach ($types as $type => $header) { 
     if (strpos($bytes, $header) === 0) { 
      $filetype = $type; 
      break; 
     } 
    } 
    fclose($handle); 
    return $filetype; 
} 

這實際上是對文檔信息(一個很簡單的替換功能),它工作在幾乎相同的方式,但在一個非常擴展(或更低)的水平。

方法是使用一個已經取得外部的PHP類像this one例如..