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下一个阿拉伯数字转中文数字的函数
Jul 16 PHP
php Ajax乱码
Apr 09 PHP
php AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
php读取mysql的简单实例
Jan 15 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php三元运算符知识汇总
Jul 02 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
Yii框架的布局文件实例分析
Sep 04 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
如何隐藏你的.php文件
2007/01/04 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php实现paypal 授权登录
2015/05/28 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
jQuery实现动画效果的实例代码
2013/05/07 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
JavaScript实现图片放大镜效果
2019/06/27 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
用Python编写一个国际象棋AI程序
2014/11/28 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python实现换位加密算法的示例
2018/10/14 Python
python实现kmp算法的实例代码
2019/04/03 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python palywright库基本使用
2021/01/21 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
南京迈特望C/C++面试题
2012/07/09 面试题
大学生志愿者活动总结
2014/06/27 职场文书
身边的榜样活动方案
2014/08/20 职场文书
诉讼授权委托书
2014/10/15 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
天气温馨提示语
2015/07/14 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
使用CSS设置滚动条样式
2022/01/18 HTML / CSS