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下几种删除目录的方法总结
Aug 19 PHP
php 特殊字符处理函数
Sep 05 PHP
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
openPNE常用方法分享
Nov 29 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
浅析Yii2缓存的使用
May 10 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
zend框架实现支持sql server的操作方法
Dec 08 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
Git命令之分支详解
Mar 02 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令牌 Token改进版
2008/07/18 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
几行js代码实现自适应
2017/02/24 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
python读写二进制文件的方法
2015/05/09 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python中GIL的使用详解
2018/10/03 Python
python 输出所有大小写字母的方法
2019/01/02 Python
Python中dict和set的用法讲解
2019/03/28 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
Python decimal模块使用方法详解
2020/06/08 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
极简的HTML5模版
2015/07/09 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
巴西购物网站:Submarino
2020/01/19 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
C有"按引用传递"吗
2016/09/06 面试题
上海微创软件面试题
2012/06/14 面试题
技术总监岗位职责
2013/12/05 职场文书
股权转让意向书
2014/04/01 职场文书
企业口号大全
2014/06/12 职场文书
防汛工作情况汇报
2014/10/28 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers