php 获取文件MIME类型的实现方法

内容摘要
这篇文章主要为大家详细介绍了php 获取文件MIME类型的实现方法,具有一定的参考价值,可以用来参考一下。

php获取文件MIME类型,对此感兴趣的朋友,看看idc笔记做的技术笔记。经测
文章正文

这篇文章主要为大家详细介绍了php 获取文件MIME类型的实现方法,具有一定的参考价值,可以用来参考一下。

php获取文件MIME类型,对此感兴趣的朋友,看看idc笔记做的技术笔记。经测试代码如下:

<?php
/**
 * 获取文件MIME类型
 *
 * @param 
 * @author php教程 www.idcnote.com
 **/
$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教程(www.idcnote.com)   ***/

注:关于php 获取文件MIME类型的实现方法的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!