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调用Java对象的方法
Oct 09 PHP
杏林同学录(四)
Oct 09 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
php include和require的区别深入解析
Jun 17 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 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
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
使用Python的内建模块collections的教程
2015/04/28 Python
Python实现的最近最少使用算法
2015/07/10 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
如何获得EntityManager
2014/02/09 面试题
马云的职业生涯规划之路
2014/01/01 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
人力资源总监工作说明
2014/03/03 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
出国留学计划书
2014/04/27 职场文书
四年级数学教学反思
2016/02/16 职场文书
教师节作文之小学四年级
2019/09/03 职场文书