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 相关文章推荐
谈谈PHP语法(4)
Oct 09 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
laravel自定义分页效果
Jul 23 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP实现的装箱算法示例
Jun 23 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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里得到前天和昨天的日期的代码
2007/08/16 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
淘宝搜索框效果实现分析
2011/03/05 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
django在开发中取消外键约束的实现
2020/05/20 Python
Python中bisect的用法及示例详解
2020/07/20 Python
美国眼镜网:GlassesUSA
2017/09/07 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
小学生自我鉴定
2013/10/12 职场文书
运动会广播稿200字
2014/01/15 职场文书
求职简历的自我评价
2014/01/31 职场文书
我的小天地教学反思
2014/04/30 职场文书
大学社团计划书
2014/05/01 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
房产协议书范本2014
2014/09/30 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
Python Parser的用法
2021/05/12 Python
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android