php准确获取文件MIME类型的方法
author:一佰互联 2019-04-28   click:153

本文实例讲述了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.txtvar_dump(_getMimeType($path));/*End of php*/

希望本文所述对大家的php程序设计有所帮助。