检测文件是否是PHP中没有mime类型的音频文件

时间:2018-10-19 20:10:43

标签: php apache file audio

我允许用户将文件上传到我的服务器,因此我需要检测文件是否为音频文件。我尝试使用mime_content_type($path)根据MIME类型进行检查,但通常它返回application/octet-stream。如果它是图像,我可以使用getimagesize(),那么音频文件是否等效?

2 个答案:

答案 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]。