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 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
PHP伪造referer实例代码
Sep 20 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP调用其他文件中的类
Apr 02 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
php实现断点续传大文件示例代码
Jun 19 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 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面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php获取域名的google收录示例
2014/03/24 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python实现Windows电脑定时关机
2018/06/20 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
优秀生推荐信范文
2013/11/28 职场文书
个人授权委托书样本
2014/09/13 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL