php教程

超轻量级php框架startmvc

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

更新时间:2020-03-04 22:11 作者:startmvc
本文实例讲述了php准确获取文件MIME类型的方法。分享给大家供大家参考。具体实现方法如

本文实例讲述了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程序设计有所帮助。