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.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
php实现文件下载实例分享
Jun 02 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 PHP
深入分析PHP设计模式
Jun 15 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
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Django实现表单验证
2018/09/08 Python
python实现各种插值法(数值分析)
2019/07/30 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
高中的自我鉴定
2013/12/16 职场文书
满月酒答谢词
2014/01/14 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
保研推荐信
2014/05/09 职场文书
护林防火标语
2014/06/27 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
个人委托书范本汇总
2014/10/01 职场文书
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技