【发布时间】:2011-01-28 04:02:15
【问题描述】:
我正在尝试确定文件的 MIME 类型。我尝试了一些方法,但没有想出任何能提供一致输出的方法。我试过$mime = mime_content_type($file) 和$mime = exec('file -bi ' . $file)。我正在提供图片、CSS 和 JavaScript。
示例mime_content_type() 输出:
- jquery.min.js - 文本/纯文本
- editor.js - 文本/纯文本
- admin.css - 文本/纯文本
- controls.css - 应用程序/x-troff
- logo.png - 文本/纯文本
示例exec(...) 输出:
- jquery.min.js - 文本/纯文本; charset=us-ascii
- editor.js - 文本/x-c++; charset=us-ascii
- admin.css - 文本/x-c; charset=us-ascii
- controls.css - 文本/x-c; charset=us-ascii
- logo.png - 图片/png
从这里可以看出,结果无处不在。
我的 PHP 版本是 5.2.6
解决方案(感谢 Jacob)
$mimetypes = array(
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpg',
'css' => 'text/css',
'js' => 'text/javascript',
);
$path_parts = pathinfo($file);
if (array_key_exists($path_parts['extension'], $mimetypes)) {
$mime = $mimetypes[$path_parts['extension']];
} else {
$mime = 'application/octet-stream';
}
【问题讨论】:
-
你说你用的是5.2.6,那你怎么用
fileinfo? -
pathinfo()自 PHP 4.0.3 以来一直存在 - us.php.net/pathinfo -
赞成添加解决方案,也就是说,提供的解决方案本质上是不安全的,因为它只检查文件扩展名,不应该用于上传的文件来检查有效性。
-
@buggedcom - 我同意。在我的情况下,文件由我们管理,所以这个解决方案是可以接受的。我找不到有效的安全解决方案。我愿意为可行的安全解决方案提供公认的答案。
标签: php file content-type mime-types