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 ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
PHP多个版本的分析解释
Jul 21 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php比较两个字符串长度的方法
Jul 13 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 PHP
laravel5.6中的外键约束示例
Oct 23 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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 获取远程网页内容的函数
2009/09/08 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
php创建类并调用的实例方法
2019/09/25 PHP
js 加载并解析XML字符串的代码
2009/12/13 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
python 如何调用远程接口
2020/09/11 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
贸易跟单员英文求职信
2014/04/19 职场文书
二年级学生评语大全
2014/04/23 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
2019教师的学习计划
2019/06/25 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
Redis三种集群模式详解
2021/10/05 Redis
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
MySQL 数据类型详情
2021/11/11 MySQL
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫