验证音频文件


Validate an audio file

除了比较MIME类型之外,PHP中是否有任何内置函数来验证音频文件,因为如果用户说用户只使用网络浏览器上传,任何人都可以让自定义上传器将MIME类型发送为audio/mpeg,即使它是EXE。

还是我真的必须比较每个文件的神奇数字?

假设我只接受mp3,ogg,wav,mka,wma,mp4(m4a)上传。

您可以使用FileInfo扩展名。这里的mime类型不是由客户端提供的;它们是通过CCD_ 1扩展来计算的。mime类型是通过查看文件的内容(通常是文件的前几个字节,但有些文件格式需要更多的分析)来确定的。

因此,如果一个文件被识别为音频文件,那么它就不可能是可执行文件。它可能是带有音频文件签名的可执行文件,但音频播放器不会执行它;他们只会读取文件并将其视为音频数据(很可能会给你一个错误,说文件已损坏)。

我不确定扩展名在多大程度上查看文件,但我很确定它能做的尽可能少。换句话说,它很可能不会遍历整个文件,检查它是否100%有效。为了对您允许的所有文件格式都做到这一点,您需要更多的重载程序,可能至少需要一个专用服务器。除非绝对需要100%确定文件的有效性,否则像这里这样粗略检查就足够了。

$file = '/path/to/file.mp3';
$info = new finfo(FILEINFO_MIME);
$type = $info->buffer(file_get_contents($file));
switch ($type) {
    case 'audio/mpeg':
        echo 'MP3!';
    break;
    case 'audio/ogg':
        echo 'OGG!';
    break;
    case 'audio/wav':
        echo 'WAV!';
    break;
    case 'audio/x-matroska':
        echo 'MKA!';
    break;
    case 'audio/mp4':
        echo 'MP4!';
    break;
    default:
        die('Format not supported!');
    break;
}