2010-09-12 55 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扩展来上传恶意代码。