php准确获取文件MIME类型的方法

 更新时间:2015年06月17日 15:44:44   作者:邪恶的小Y  
这篇文章主要介绍了php准确获取文件MIME类型的方法,涉及php针对文件属性操作的相关技巧,需要的朋友可以参考下

本文实例讲述了php准确获取文件MIME类型的方法。分享给大家供大家参考。具体实现方法如下:

<?php
$mime = array (
    //applications
    'ai'  => 'application/postscript',
    'eps'  => 'application/postscript',
    'exe'  => 'application/octet-stream',
    'doc'  => 'application/vnd.ms-word',
    'xls'  => 'application/vnd.ms-excel',
    'ppt'  => 'application/vnd.ms-powerpoint',
    'pps'  => 'application/vnd.ms-powerpoint',
    'pdf'  => 'application/pdf',
    'xml'  => 'application/xml',
    'odt'  => 'application/vnd.oasis.opendocument.text',
    'swf'  => 'application/x-shockwave-flash',
    // archives
    'gz'  => 'application/x-gzip',
    'tgz'  => 'application/x-gzip',
    'bz'  => 'application/x-bzip2',
    'bz2'  => 'application/x-bzip2',
    'tbz'  => 'application/x-bzip2',
    'zip'  => 'application/zip',
    'rar'  => 'application/x-rar',
    'tar'  => 'application/x-tar',
    '7z'  => 'application/x-7z-compressed',
    // texts
    'txt'  => 'text/plain',
    'php'  => 'text/x-php',
    'html' => 'text/html',
    'htm'  => 'text/html',
    'js'  => 'text/javascript',
    'css'  => 'text/css',
    'rtf'  => 'text/rtf',
    'rtfd' => 'text/rtfd',
    'py'  => 'text/x-python',
    'java' => 'text/x-java-source',
    'rb'  => 'text/x-ruby',
    'sh'  => 'text/x-shellscript',
    'pl'  => 'text/x-perl',
    'sql'  => 'text/x-sql',
    // images
    'bmp'  => 'image/x-ms-bmp',
    'jpg'  => 'image/jpeg',
    'jpeg' => 'image/jpeg',
    'gif'  => 'image/gif',
    'png'  => 'image/png',
    'tif'  => 'image/tiff',
    'tiff' => 'image/tiff',
    'tga'  => 'image/x-targa',
    'psd'  => 'image/vnd.adobe.photoshop',
    //audio
    'mp3'  => 'audio/mpeg',
    'mid'  => 'audio/midi',
    'ogg'  => 'audio/ogg',
    'mp4a' => 'audio/mp4',
    'wav'  => 'audio/wav',
    'wma'  => 'audio/x-ms-wma',
    // video
    'avi'  => 'video/x-msvideo',
    'dv'  => 'video/x-dv',
    'mp4'  => 'video/mp4',
    'mpeg' => 'video/mpeg',
    'mpg'  => 'video/mpeg',
    'mov'  => 'video/quicktime',
    'wm'  => 'video/x-ms-wmv',
    'flv'  => 'video/x-flv',
    'mkv'  => 'video/x-matroska'
    );
function _getMimeDetect() {
  if (class_exists('finfo')) {
    return 'finfo';
  } else if (function_exists('mime_content_type')) {
    return 'mime_content_type';
  } else if ( function_exists('exec')) {
    $result = exec('file -ib '.escapeshellarg(__FILE__));
    if ( 0 === strpos($result, 'text/x-php') OR 0 === strpos($result, 'text/x-c++')) {
      return 'linux';
    }
    $result = exec('file -Ib '.escapeshellarg(__FILE__));
    if ( 0 === strpos($result, 'text/x-php') OR 0 === strpos($result, 'text/x-c++')) {
      return 'bsd';
    }
  }
  return 'internal';
}
function _getMimeType($path) {
  global $mime;
  $fmime = _getMimeDetect();
  switch($fmime) {
    case 'finfo':
      $finfo = finfo_open(FILEINFO_MIME);
      if ($finfo) 
        $type = @finfo_file($finfo, $path);
      break;
    case 'mime_content_type':
      $type = mime_content_type($path);
      break;
    case 'linux':
      $type = exec('file -ib '.escapeshellarg($path));
      break;
    case 'bsd':
      $type = exec('file -Ib '.escapeshellarg($path));
      break;
    default:
      $pinfo = pathinfo($path);
      $ext = isset($pinfo['extension']) ? strtolower($pinfo['extension']) : '';
      $type = isset($mime[$ext]) ? $mime[$ext] : 'unkown';
      break;
  }
  $type = explode(';', $type);
  //需要加上这段,因为如果使用mime_content_type函数来获取一个不存在的$path时会返回'application/octet-stream'
  if ($fmime != 'internal' AND $type[0] == 'application/octet-stream') {
    $pinfo = pathinfo($path); 
    $ext = isset($pinfo['extension']) ? strtolower($pinfo['extension']) : '';
    if (!empty($ext) AND !empty($mime[$ext])) {
      $type[0] = $mime[$ext];
    }
  }
  return $type[0];
}
$path = '1.txt'; //实际上当前路径并不存在1.txt
var_dump(_getMimeType($path));
/*End of php*/

希望本文所述对大家的php程序设计有所帮助。

相关文章

  • PHP5 面向对象(学习记录)

    PHP5 面向对象(学习记录)

    PHP5已经支持面向对象,这样可以提高代码效率,与代码的复用性。
    2009-12-12
  • php冒泡排序与快速排序实例详解

    php冒泡排序与快速排序实例详解

    这篇文章主要介绍了php冒泡排序与快速排序实现方法,结合实例形式较为详细的分析了phpphp排序算法的递归、遍历运算及流程控制的相关技巧,需要的朋友可以参考下
    2015-12-12
  • php ajax异步读取rss文档数据

    php ajax异步读取rss文档数据

    这篇文章主要介绍了php ajax异步读取rss文档数据的相关资料,RSS是一种描述和同步网站内容的格式,需要的朋友可以参考下
    2016-03-03
  • php引用计数器进行垃圾收集机制介绍

    php引用计数器进行垃圾收集机制介绍

    每一种计算机语言都有自己的自动垃圾回收机制,让程序员不必过分关心程序内存分配,php也不例外,但是在面向对象编程(OOP)编程中,有些对象需要显式的销毁;防止程序执行内存溢出
    2012-09-09
  • php实现的二分查找算法示例

    php实现的二分查找算法示例

    这篇文章主要介绍了php实现的二分查找算法,结合具体实例形式分析了php二分查找算法的实现与使用技巧,涉及php数组判断、遍历、计算等相关操作,需要的朋友可以参考下
    2017-06-06
  • PHP常用开发函数解析之数组篇[未完结]

    PHP常用开发函数解析之数组篇[未完结]

    数组处理函数在PHP开发中非常常见,学习好数组处理函数至关重要.数组处理函数在实际应用中涉及到:数组的创建,字符串于数组的相互转换,数组转XML,数组转JSON.数组的检测.数组的合并于分割.数组的数目.获取数组中的所有值,获取数组中的所有键值
    2012-07-07
  • 一个数据采集类

    一个数据采集类

    一个数据采集类...
    2007-02-02
  • PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

    PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

    这篇文章主要介绍了PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法,较为详细的分析了Windows平台sendmail配置步骤与相应的使用技巧,需要的朋友可以参考下
    2017-06-06
  • php 无限极分类

    php 无限极分类

    至于添加删除之类的功能我就不多写了!仔细看看就知道这么用了. 难的是显示方面 希望高手扩展一下! 这是类
    2008-03-03
  • php实现收发邮件的方法详解

    php实现收发邮件的方法详解

    这篇文章主要为大家详细介绍了php实现收发邮件的多种方法总结,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解下
    2023-11-11

最新评论