我允许用户将文件上传到我的服务器,因此我需要检测文件是否为音频文件。我尝试使用mime_content_type($path)
根据MIME类型进行检查,但通常它返回application/octet-stream
。如果它是图像,我可以使用getimagesize()
,那么音频文件是否等效?
答案 0 :(得分:0)
如果直接打开文件以获取mime类型怎么办
function check_file_is_audio( $tmp )
{
$allowed = array(
'audio/mpeg', 'audio/x-mpeg', 'audio/mpeg3', 'audio/x-mpeg-3', 'audio/aiff',
'audio/mid', 'audio/x-aiff', 'audio/x-mpequrl','audio/midi', 'audio/x-mid',
'audio/x-midi','audio/wav','audio/x-wav','audio/xm','audio/x-aac','audio/basic',
'audio/flac','audio/mp4','audio/x-matroska','audio/ogg','audio/s3m','audio/x-ms-wax',
'audio/xm'
);
// check REAL MIME type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $tmp );
finfo_close($finfo);
// check to see if REAL MIME type is inside $allowed array
if( in_array($type, $allowed) ) {
return true;
} else {
return false;
}
}
答案 1 :(得分:0)
MP3数据检测是一件奇怪的事情。在读取/处理大量数据或仅在指定位置查找某些值之间,需要进行认真的权衡。
就mime类型检测而言,我认为[如果我错了就纠正我] application/octet-stream
是默认的后备类型。
如果您想要一个快速又脏又高效的解决方案,我建议仅使用文件扩展名*.mp3
来确定其类型。
如果此功能的可靠性至关重要[比性能优先级高] 您可以使用ffprobe之类的库[来自ffmpeg]。