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出错界面
Oct 09 PHP
PHP安全编程之加密功能
Oct 09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
PHP与Perl之间知识点区别整理
Mar 19 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
javascript闭包入门示例
2014/04/30 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
Python程序退出方式小结
2017/12/09 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python模拟实现斗地主发牌
2020/01/07 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
python中的错误如何查看
2020/07/08 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
台湾森森购物网:U-mall
2017/10/16 全球购物
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
培训研修方案
2014/06/06 职场文书
课外活动总结范文
2014/07/09 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
成绩单家长意见
2015/06/03 职场文书
于丹论语心得观后感
2015/06/15 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js