2010-09-12 54 views
2

我正在寫一個腳本,我需要正確的(我認爲一些MIME類型可以不同於他們的擴展名)獲取MIME類型的文件(這些文件可以是任何類型的文件) 。我怎樣才能得到MIME類型的PHP

網絡託管公司在使用中沒有mime_content_type(),並且仍然(不知道他們將在哪一年修復它)承諾修復PECL替代方案。

還有哪些方法可以解決它(而且我不能訪問shell命令)?

+0

現在該更改您的託管服務提供商。 – shamittomar 2010-09-12 00:55:31

回答

2

我使用下面的函數,這是3種最常用的方法的包裝:

function Mime($path, $magic = null) 
{ 
    $path = realpath($path); 

    if ($path !== false) 
    { 
     if (function_exists('finfo_open') === true) 
     { 
      $finfo = finfo_open(FILEINFO_MIME_TYPE, $magic); 

      if (is_resource($finfo) === true) 
      { 
       $result = finfo_file($finfo, $path); 
      } 

      finfo_close($finfo); 
     } 

     else if (function_exists('mime_content_type') === true) 
     { 
      $result = mime_content_type($path); 
     } 

     else if (function_exists('exif_imagetype') === true) 
     { 
      $result = image_type_to_mime_type(exif_imagetype($path)); 
     } 

     return preg_replace('~^(.+);.+$~', '$1', $result); 
    } 

    return false; 
} 
2

$ _FILES [ '文件'] [ '類型']來自瀏覽器上傳文件,所以你不能依賴這個值。

檢出finfo_file基於文件內容識別文件類型。該文件的擴展名也不可靠,因爲用戶可以通過mp3擴展來上傳惡意代碼。