Определите, является ли файл аудиофайлом в PHP без mime-типа - PullRequest
0 голосов
/ 19 октября 2018

Я разрешаю пользователям загружать файлы на мой сервер, поэтому мне нужно определить, является ли файл аудиофайлом.Я пытался проверить, основываясь на типе MIME, используя mime_content_type($path), но часто он возвращает application/octet-stream.Если бы это было изображение, я мог бы использовать getimagesize(), так есть ли эквивалент для аудиофайлов?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Mp3 обнаружение данных - странная вещь.Существует серьезный компромисс между чтением / обработкой большого количества данных или просто поиском определенных значений в указанных местах.

Что касается обнаружения типа mime, я думаю [исправьте меня, если я ошибаюсь] application/octet-stream является резервным типом по умолчанию.

, если вы хотите быстрое и грязное, но производительное решение, я бы просто использовал расширение файла *.mp3, чтобы определить его тип.

Если надежность этогофункциональность имеет решающее значение [более высокий приоритет, чем производительность], вы можете использовать такую ​​библиотеку, как ffprobe [из ffmpeg].

0 голосов
/ 19 октября 2018

что, если вы откроете файл напрямую, чтобы получить тип 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;
    }
}
...