确定 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
还有其他人有更好的方法吗?识别正在上传到服务器的文件的正确方法是什么?