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 相关文章推荐
PR值查询 | PageRank 查询
Dec 20 PHP
一个PHP操作Access类(PHP+ODBC+Access)
Jan 02 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
php文件上传的例子及参数详解
Dec 12 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
php取得字符串首字母的方法
Mar 25 PHP
php获得刚插入数据的id 的几种方法总结
May 31 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 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
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
JsonServer安装及启动过程图解
2020/02/28 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python遍历小写英文字母的方法
2019/01/02 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
软件工程师面试题
2012/06/25 面试题
竞选学习委员演讲稿
2014/04/28 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python