繁体   English   中英

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

[英]Detect if a file is an audio file in PHP without mime type

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

如果直接打开文件以获取哑剧类型怎么办

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;
    }
}

MP3数据检测是一件奇怪的事情。 在读取/处理大量数据或仅在指定位置查找某些值之间需要进行认真的权衡。

至于mime类型检测,我认为[如果我错了,请纠正我] application/octet-stream是默认的后备类型。

如果您想要一个快速又脏又高效的解决方案,我建议您仅使用文件扩展名*.mp3来确定其类型。

如果此功能的可靠性至关重要(优先于性能),则可以使用ffprobe之类的库(来自ffmpeg)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM