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发送post请求函数分享
Mar 06 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
php中curl使用指南
Feb 05 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
总结对比php中的多种序列化
Aug 28 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 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 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
小程序云开发实战小结
2018/10/25 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
简单讲解Python中的闭包
2015/08/11 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python绘制圆柱体的方法
2018/07/02 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python matplotlib可视化实例解析
2020/06/01 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
大学生开西餐厅创业计划书
2014/02/01 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
先进单位申报材料
2014/12/25 职场文书
三好学生个人总结
2015/02/15 职场文书
高一军训口号
2015/12/25 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
Java基础之this关键字的使用
2021/06/30 Java/Android