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 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
php保存信息到当前Session的方法
Mar 16 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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
新52大事件
2020/03/03 欧美动漫
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
PHP调用三种数据库的方法(3)
2006/10/09 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
Javascript 面向对象 重载
2010/05/13 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
Vue基础配置讲解
2019/11/29 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python字典的常用操作方法小结
2016/05/16 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python对象与引用的介绍
2019/01/24 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
金融专业大学生自我评价
2014/01/09 职场文书
装饰活动策划方案
2014/02/11 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
新闻报道稿范文
2015/07/23 职场文书
物业保洁员管理制度
2015/08/05 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
青岛市的收音机研制与生产
2022/04/07 无线电