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


Posted in PHP onJune 17, 2015

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
C# Assembly类访问程序集信息
Jun 13 PHP
PHP 可阅读随机字符串代码
May 26 PHP
php4与php5的区别小结(配置异同)
Dec 20 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 PHP
php操作MongoDB类实例
Jun 17 #PHP
PHP实现的购物车类实例
Jun 17 #PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 #PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 #PHP
php使用curl打开https网站的方法
Jun 17 #PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 #PHP
PHP封装的HttpClient类用法实例
Jun 17 #PHP
You might like
php页面缓存方法小结
2015/01/10 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
vue--vuex详解
2019/04/15 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python中__name__的使用实例
2015/04/14 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
python3排序的实例方法
2020/10/20 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
JPA的特点
2014/10/25 面试题
保险经纪人求职信
2014/03/11 职场文书
春节联欢会主持词
2014/03/24 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
金榜题名主持词
2015/07/02 职场文书
导游词之镇江焦山
2019/11/21 职场文书