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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP 七大优势分析
Jun 23 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
php查询操作实现投票功能
May 09 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php session处理的定制
2009/03/16 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
python实现飞机大战微信小游戏
2020/03/21 Python
Django实现文件上传和下载功能
2019/10/06 Python
python脚本后台执行方式
2019/12/21 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
简单的Python人脸识别系统
2020/07/14 Python
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
星空联盟C# .net笔试题
2014/12/05 面试题
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
小学生获奖感言范文
2014/02/02 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
八达岭长城导游词
2015/01/30 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Go语言基础map用法及示例详解
2021/11/17 Golang
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android