确定本地文件';使用PHP创建Mime类型(内容类型)
我正在尝试确定文件的mime类型。我已经尝试了一些方法,但还没有找到任何能提供一致输出的方法。我尝试了确定本地文件';使用PHP创建Mime类型(内容类型),php,file,content-type,mime-types,Php,File,Content Type,Mime Types,我正在尝试确定文件的mime类型。我已经尝试了一些方法,但还没有找到任何能提供一致输出的方法。我尝试了$mime=mime\u content\u type($file)和$mime=exec('file-bi.$file)。我正在提供图像、CSS和JavaScript 示例mime\u content\u type()输出: jquery.min.js-文本/普通 editor.js-文本/纯文本 admin.css-文本/纯文本 controls.css-应用程序/x-troff logo
$mime=mime\u content\u type($file)
和$mime=exec('file-bi.$file)
。我正在提供图像、CSS和JavaScript
示例mime\u content\u type()
输出:
- jquery.min.js-文本/普通
- editor.js-文本/纯文本
- admin.css-文本/纯文本
- controls.css-应用程序/x-troff
- logo.png-文本/纯文本
exec(…)
输出:
- jquery.min.js-text/plain;字符集=美国ascii码
- editor.js-text/x-c++;字符集=美国ascii码
- admin.css-text/x-c;字符集=美国ascii码
- controls.css-text/x-c;字符集=美国ascii码
- logo.png-image/png
解决方案(感谢Jacob) 如果您在>=5.30上,分机将完成此任务
- 您应该尽量避免执行命令
- PHP 5.30中不推荐使用
mime\u content\u type
如果不幸的是,您使用的是<5.30,那么我可能会自己编写它,它比您从上面的函数/命令中获得的要可靠得多 下面是一个例子:
<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
'js' => 'application/x-javascript'
// any other extensions that you may be serving
);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
$mime = $mimetypes[$ext];
} else {
echo 'mime type not found';
}
?>
文件信息为PHP>=5.3.0。我在5.2.6上。我刚刚更新了我的帖子来反映这一点。使用您的解决方案,但您应该将in_array()
更改为array\u key_exists()
,并反转参数。您说您使用的是5.2.6,那么您如何使用fileinfo
?pathinfo()
自PHP4.0.3以来就一直存在,也就是说,提供的解决方案本质上是不安全的,因为它只检查文件扩展名,不应在上载的文件上使用它来检查有效性。@buggedcom-我同意。在我的例子中,文件由我们管理,所以这个解决方案是可以接受的。我找不到有效的安全解决方案。我愿意为有效的安全解决方案提供一个公认的答案。
<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
'js' => 'application/x-javascript'
// any other extensions that you may be serving
);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
$mime = $mimetypes[$ext];
} else {
echo 'mime type not found';
}
?>