【发布时间】:2012-07-04 00:40:16
【问题描述】:
确定 mime 类型或文件类型的最佳方法是什么,阻止任何恶意通过并确保错误不会进入您的系统。
在我的示例中,我需要一种筛选方式,因此只需将 .mp3 上传到网站。现在我知道有 mime_content_type 但这会给出奇怪的结果,具体取决于文件的制作方式和您使用的浏览器,看到它从浏览器获取数据,至少我是这么理解的。
这是我使用 mime 类型进行识别的代码。
if(mime_content_type_new($_FILES["userfile"]) == 'audio/mpeg' ) { do stuff }
然后是使用 unix 命令行并解释它
$fileinfo = exec("file -b 'song.mp3'"); echo $filinfo;
这会输出类似这样的内容。
ID3 版本 2.3.0 的音频文件,包含:MPEG ADTS,第三层,v1, 192 kbps、44.1 kHz、立体声
这样我们就可以排序并检查它是否与我们的文件类型匹配。
$fileinfo = exec("file -b 'song.mp3'");
$filewewant = "MPEG";
$mpeg = stripos($fileinfo, $filewewant);
$filewewant = "layer III";
$mpeg3 = stripos($fileinfo, $filewewant);
if ($mpeg !== False & $mpeg3 !== False)
{ echo "success"; };
这种方式似乎工作得更好,不管扩展名是什么(例如它是否重命名为.png),但需要先保存文件然后排序,并且不适用于Windows。
我也被指向http://pear.php.net/package/MIME_Type
还有其他人有更好的方法吗?识别正在上传到服务器的文件的正确方法是什么?
【问题讨论】:
-
How to get the content-type of a file in PHP? 的可能重复项。话虽如此,我在这里欢迎更全面的答案......
-
我在查找时没有看到那个,引用了 mime-types 分配,只是想找出随着时间的推移有哪些替代方案(查看日期)
标签: php file-upload mp3 mime-types mime