php准确获取文件MIME类型的方法

5年以前  |  阅读数:805 次  |  编程语言:PHP 

本文实例讲述了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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例